程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 九度OJ 題目1033:繼續xxx定律

九度OJ 題目1033:繼續xxx定律

編輯:C++入門知識

[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; }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved