张家港市网站建设,推广公司经营范围,小企业想做网站推广找哪家强,网站推荐你懂我的意思吧知乎卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里#xff0c;情况稍微有些复杂。 当我们验证卡拉兹猜想的时候#xff0c;为了避免重复计算#xff0c;可以记录下递推过程中遇到的每一个数。例如对n3进行验证的时候#xff0c;我们需要计算3、5、8、4、2、1#… 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里情况稍微有些复杂。 当我们验证卡拉兹猜想的时候为了避免重复计算可以记录下递推过程中遇到的每一个数。例如对n3进行验证的时候我们需要计算3、5、8、4、2、1则当我们对n5、8、4、2进行验证的时候就可以直接判定卡拉兹猜想的真伪而不需要重复计算因为这4个数已经在验证3的时候遇到过了我们称5、8、4、2是被3“覆盖”的数。我们称一个数列中的某个数n为“关键数”如果n不能被数列中的其他数字所覆盖。 现在给定一系列待验证的数字我们只需要验证其中的几个关键数就可以不必再重复验证余下的数字。你的任务就是找出这些关键数字并按从大到小的顺序输出它们。 输入格式每个测试输入包含1个测试用例第1行给出一个正整数K(100)第2行给出K个互不相同的待验证的正整数n(1n100)的值数字间用空格隔开。 输出格式每个测试用例的输出占一行按从大到小的顺序输出关键数字。数字间用1个空格隔开但一行中最后一个数字后没有空格。 输入样例 6
3 5 6 7 8 11输出样例 7 6 #includestdio.h
#includestdlib.h
int main(){int i,j,k,t,x;scanf(%d\n,k);int *p(int *)malloc(k*sizeof(int));for(i0;ik;i)scanf(%d,p[i]);for(i0;ik;i){ // 将所有非关键字归零留关键字 xp[i]; if(x0)continue;while(x!1){if(x%20)xx/2;else x(3*x1)/2;for(j0;jk;j){if(p[j]x){p[j]0;break;}//if }//for}//while}//forfor(i0;ik;i) {//冒泡排序从打到小排列输出所有非零项即为关键字for(ji1;jk;j){if(p[i]p[j]){tp[i];p[i]p[j];p[j]t; }//if}//for(j)}//for(i)printf(%d,p[0]);for(i1;p[i]0;i)printf( %d,p[i]);free(p);return 0;
} #includecstdio
#includealgorithm
using namespace std;
const int maxn 11000;
bool hashTable[maxn] {false};
int a[maxn];void isCallatz(int n){while(n ! 1){if(n % 2 0) n n / 2;else n (3 * n 1) / 2 ;hashTable[n] true; }
}int main(){int k,n;scanf(%d,k);//for(int i 0; i 110; i) p[i] i;for(int i 0; i k; i){scanf(%d,n);a[i] n;if(n ! 1){isCallatz(n);}}sort(a,ak);bool flag false;for(int i k - 1; i 0; i--){if(hashTable[a[i]] false){if(flag false){printf(%d,a[i]);flag true;}else{printf( %d,a[i]);}}}return 0;
} 转载于:https://www.cnblogs.com/wanghao-boke/p/9360568.html