如何建设自己企业网站,网站如何做才可以微信直接登录,学校网站资源建设,复试联系导师模板卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里#xff0c;情况稍微有些复杂。当我们验证卡拉兹猜想的时候#xff0c;为了避免重复计算#xff0c;可以记录下递推过程中遇到的每一个数。例如对 n3 进行验证的时候#xff0c;我们需要计算 3、5、8、4、2、1情况稍微有些复杂。当我们验证卡拉兹猜想的时候为了避免重复计算可以记录下递推过程中遇到的每一个数。例如对 n3 进行验证的时候我们需要计算 3、5、8、4、2、1则当我们对 n5、8、4、2 进行验证的时候就可以直接判定卡拉兹猜想的真伪而不需要重复计算因为这 4 个数已经在验证3的时候遇到过了我们称 5、8、4、2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关键数”如果 n 不能被数列中的其他数字所覆盖。现在给定一系列待验证的数字我们只需要验证其中的几个关键数就可以不必再重复验证余下的数字。你的任务就是找出这些关键数字并按从大到小的顺序输出它们。输入格式每个测试输入包含 1 个测试用例第 1 行给出一个正整数 K (输出格式每个测试用例的输出占一行按从大到小的顺序输出关键数字。数字间用 1 个空格隔开但一行中最后一个数字后没有空格。输入样例63 5 6 7 8 11输出样例7 6思路最开始就顺着想要求出所有输入数字的猜想数如果输入的K个数字有数字n不在所有的猜想数内那n就是其中一个关键字1.输入数字归为一个数组a[]2.求出所有猜想数归为一个数组b[]3.如果输入的数字a[i]在数组b[]中那a[i]归零4.最后对a[]排序按格式输出答案因为猜想数的个数是动态的必然是有重复的所以需要考验数组长度或去重这样能加快一些效率(之前错误的思路1.求出所有输入数字的关键字(也就是第一步运算得出的数字)放入一个数组内keyNum[],2.用输入的数字数组inputNum[]与keyNum[]中的值比较相等则为零3.最后输出inputNum[]错误的地方在于inputNum[]中的元素可能不再关键字keyNum[]中,而在所有的猜想数字中)以下为笨方法直接定义了一个长度为10000的猜想数数组import java.util.Scanner;public class Main{public static void main (String [] args){Scanner in new Scanner(System.in);int num in.nextInt();int []testNumnew int[num];//声明输入数字的数组int []resultnew int[10000];//声明猜想数字的数组int count0;for(int i0;i{testNum[i]in.nextInt();}resultmyMethod(testNum);//获得所有猜想数字for(int i0;i{for(int j0;j10000;j){if(result[j]testNum[i]){testNum[i]0;break;}}}for(int i0;i{boolean tempBooltrue;for(int j0;j{if(testNum[j]{int[]temp {testNum[j]};testNum[j]testNum[j1];testNum[j1]temp[0];tempBoolfalse;}}if(tempBool){break;}}for(int i:testNum)//输出答案{if(i!0count0){System.out.print(i);count;}else if(i!0count0){System.out.print( i);}}}public static int[] myMethod(int[]testNum)//求所有猜想数字的方法{int[]tempnew int[10000];int tempCount0;for(int i 0;i{int mtestNum[i];for(int j0;j{if(m%20){temp[tempCount]m/2;mm/2;tempCount;}else{temp[tempCount](3*m1)/2;m(3*m1)/2;tempCount;}}}return temp;}}