1 题目要求
https://www.patest.cn/contests/pat-b-practise/1005
2 源代码
import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextInt(); int[] array1 = new int[n]; for(int i=0;i<n;i++) { array1[i]=input.nextInt(); } ArrayList<Integer> list1 = new ArrayList<Integer>(); for(int indexa:array1) { while(indexa!=1) { if(indexa%2==0) { indexa=indexa/2; }else { indexa=(3*indexa+1)/2; } list1.add(indexa); } } ArrayList<Integer> list2 = new ArrayList<Integer>(); for(int indexb:array1) { if(!list1.contains(indexb)) { list2.add(indexb); } } int m = list2.size(); int[] array2 = new int[m]; for(Integer j:list2) { array2[--m]=j.intValue(); } Arrays.sort(array2); for(int k=array2.length-1;k>=1;k--) { System.out.print(array2[k]+" "); } System.out.println(array2[0]); } }
3 评测结果
4 思路
1 定义一个数组,把第二行输入的数用数组接收
2 将第二行输入的数放在数组里
3 定义一个集合,for循环遍历数组,对数组每一个数进行逻辑判断,得到的结果放在集合list1中
4 遍历数组,和list1比较,如果相同, 就放在list2中,得到关键数
5 将list2转化成数组,排序,输出
5 注意点
1 做这题时,一开始输出格式不对,要求最后一个数后不能有空格!
2 不能有注释,否则会出现编译错误,这也是考试时候需要注意的!别代码调试好了,运行没问题,但是一提交各种错误!
3 这题难点在于 题意比较难理解,集合如何转换成数组,数组如何添加到集合中,这里用到了Interger的intvalue方法,将集合中的元素转化为整型赋给数组
int a = new Integer("2").intValue(); int b = new Integer(3).intValue(); System.out.println(a+1); System.out.println(b+1);
这是从integer转向int 的时候会用到intValue;
所有评论(0)