Java - PAT - 1005. 继续(3n+1)猜想 (25)

来源:互联网 发布:大数据系统架构图 编辑:程序博客网 时间:2024/06/04 23:40

题目地址:1005. 继续(3n+1)猜想 (25) 


思路:

输入数时,验证猜想,把过程中的数都读入一个数组,当然如果数组中已经存在,就不必继续添加。当这些数都添加后,遍历输入的数组,把过程数中没有的数挑出来,也就是关键数。简单点说,把这些数字都进行一次验证,过程所产生的所有的数字就是被覆盖的数字。那没被覆盖的数字就是关键数字。


import java.util.ArrayList;import java.util.Collections;import java.util.Scanner;  public class Main{  public static void main(String[] args){  Scanner sc = new Scanner(System.in);  int n = sc.nextInt();int[]a1 = new int[n];//进行操作的数组int[]a2 = new int[n];ArrayList<Integer>alist1 = new ArrayList<Integer>();//被覆盖数ArrayList<Integer>alist2 = new ArrayList<Integer>();//关键数    for(int i=0 ;i<n ;i++){a2[i] = sc.nextInt();a1[i] = a2[i];      while(a1[i]!=1){//将覆盖数添加到alist1中if(a1[i]%2==0){a1[i] /=2;if(!alist1.contains(a1[i])){alist1.add(a1[i]);}else{break;}}else{a1[i] = (3*a1[i]+1)/2;if(!alist1.contains(a1[i])){alist1.add(a1[i]);}else{break;}}}}    for(int i=0 ;i<a2.length ;i++){//遍历输入的数组 if(!alist1.contains(a2[i])){//在覆盖数中没有的话alist2.add(a2[i]);//添加到alist2 即关键数}}  Collections.sort(alist2);if(alist2.size()==1){System.out.println(alist2.get(0));}else{for(int i=alist2.size()-1 ;i>=0 ;i--){System.out.print(alist2.get(i));if(i!=0){System.out.print(" ");}}System.out.println();}}}

其实代码就是那么写字母,学一阵子就差不多都掌握了,主要是思路,训练好思维很重要,比如说这道题让求关键数字,要知道关键数就是没被覆盖的数字。直接求没被覆盖的数字不好求又或者不能求的话,那就从另一面考虑,先求出被覆盖的数字,那么剩下的数字就是没被覆盖的数字。

3 0
原创粉丝点击