PAT乙级_继续3n+1猜想

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]);
  }       
}
View Code

 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;

原文地址:https://www.cnblogs.com/sunnybowen/p/8522719.html