[cpp] /********************************* * 日期:2013-2-4 * 作者:SJF0115 * 題號: 九度OJ 題目1033:繼續xxx定律 * 來源:http://ac.jobdu.com/problem.php?pid=1033 * 結果:AC * 來源:2009年浙江大學計算機及軟件工程研究生機試真題 * 總結: **********************************/ #include<stdio.h> #include<string.h> int key[1000000];//關鍵數 key數組要開的盡量大 int main(){ int i,n,temp; int a[100000]; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%d",&n) != EOF && n != 0){ //輸入數據 for(i = 0;i < n;i++){ scanf("%d",&a[i]); } memset(key,0,sizeof(key)); for(i = 0;i < n;i++){ temp = a[i]; //求解覆蓋數,標記為1 while(temp != 1){ //如果是偶數,就把temp砍掉一半 if(temp % 2 == 0){ temp = temp / 2; } //如果是奇數,把temp變成 3*temp+ 1後砍掉一半 else{ temp = (temp * 3 + 1) / 2; } //出現在求解序列中標記為1 key[temp] = 1; }//while }//for int flag = 0; //逆序輸出關鍵數(序列中沒有標記為1的即為關鍵數) for(i = n-1;i >= 0;i--){ if(key[a[i]] == 0){ if(flag == 1){ printf(" "); } printf("%d",a[i]); flag = 1; } } printf("\n"); } return 0; } /********************************* * 日期:2013-2-4 * 作者:SJF0115 * 題號: 九度OJ 題目1033:繼續xxx定律 * 來源:http://ac.jobdu.com/problem.php?pid=1033 * 結果:AC * 來源:2009年浙江大學計算機及軟件工程研究生機試真題 * 總結: **********************************/ #include<stdio.h> #include<string.h> int key[1000000];//關鍵數 key數組要開的盡量大 int main(){ int i,n,temp; int a[100000]; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%d",&n) != EOF && n != 0){ //輸入數據 for(i = 0;i < n;i++){ scanf("%d",&a[i]); } memset(key,0,sizeof(key)); for(i = 0;i < n;i++){ temp = a[i]; //求解覆蓋數,標記為1 while(temp != 1){ //如果是偶數,就把temp砍掉一半 if(temp % 2 == 0){ temp = temp / 2; } //如果是奇數,把temp變成 3*temp+ 1後砍掉一半 else{ temp = (temp * 3 + 1) / 2; } //出現在求解序列中標記為1 key[temp] = 1; }//while }//for int flag = 0; //逆序輸出關鍵數(序列中沒有標記為1的即為關鍵數) for(i = n-1;i >= 0;i--){ if(key[a[i]] == 0){ if(flag == 1){ printf(" "); } printf("%d",a[i]); flag = 1; } } printf("\n"); } return 0; } [cpp] /********************************* * 日期:2013-2-5 * 作者:SJF0115 * 題號: 九度OJ 題目1033:繼續xxx定律 * 來源:http://ac.jobdu.com/problem.php?pid=1033 * 結果:AC * 來源:2009年浙江大學計算機及軟件工程研究生機試真題 * 總結: **********************************/ #include<stdio.h> #include<string.h> int key[1001]; int a[500]; int main() { int n,i,k; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%d",&n)!=EOF && n != 0) { memset(key,0,sizeof(key)); for(i = 0;i < n;i++) { scanf("%d",&k); a[i]=k; while(k!=1) { //如果是奇數,把k變成 3*k+ 1後砍掉一半 if(k % 2) { k = (k*3+1) / 2; } //如果是偶數,就把k砍掉一半 else { k /= 2; } //1<a[i]<=1000 //出現在求解序列中標記為1 if(k <= 1000) { key[k] = 1; } } } int flag = 0; //逆序輸出關鍵數(序列中沒有標記為1的即為關鍵數) for(i = n-1;i >= 0;i--){ if(key[a[i]] == 0){ if(flag == 1){ printf(" "); } printf("%d",a[i]); flag = 1; } } printf("\n"); } return 0; } /********************************* * 日期:2013-2-5 * 作者:SJF0115 * 題號: 九度OJ 題目1033:繼續xxx定律 * 來源:http://ac.jobdu.com/problem.php?pid=1033 * 結果:AC * 來源:2009年浙江大學計算機及軟件工程研究生機試真題 * 總結: **********************************/ #include<stdio.h> #include<string.h> int key[1001]; int a[500]; int main() { int n,i,k; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%d",&n)!=EOF && n != 0) { memset(key,0,sizeof(key)); for(i = 0;i < n;i++) { scanf("%d",&k); a[i]=k; while(k!=1) { //如果是奇數,把k變成 3*k+ 1後砍掉一半 if(k % 2) { k = (k*3+1) / 2; } //如果是偶數,就把k砍掉一半 else { k /= 2; } //1<a[i]<=1000 //出現在求解序列中標記為1 if(k <= 1000) { key[k] = 1; } } } int flag = 0; //逆序輸出關鍵數(序列中沒有標記為1的即為關鍵數) for(i = n-1;i >= 0;i--){ if(key[a[i]] == 0){ if(flag == 1){ printf(" "); } printf("%d",a[i]); flag = 1; } } printf("\n"); } return 0; }