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

HDU3784:繼續xxx定律

編輯:C++入門知識

Problem Description 當n為3時,我們在驗證xxx定律的過程中會得到一個序列,3,5,8,4,2,1,將3稱為關鍵數,5,8,4,2稱為覆蓋數。現在輸入n個數字a[i],根據關鍵數與覆蓋數的理論,我們只需要驗證其中部分數就可以確定所有數滿足xxx定律,輸出輸入的n個數中的關鍵數。如果其中有多個關鍵數的話按照其輸入順序的逆序輸出。     Input 輸入數據包含多個用例,每個用例首先包含一個整數n,然後接下來一行有n個整數a[i],其中: 1<=n<=500 1<a[i]<=1000     Output 請計算並輸出數組a中包含的關鍵數,並按照其輸入順序的逆序輸出,每個用例輸出占一行。     Sample Input 3 3 8 4 5 3 8 4 7 15 5 3 8 4 15 7 0     Sample Output 3 15 7 3 7 15 3         [cpp]        [cpp]   #include <iostream>   #include <string.h>   #include <cstdio>   using namespace std;      int main()   {       int n;       int a[1005],i,flag[1005];          while(cin >> n && n)       {           memset(flag,0,sizeof(flag));           for(i = 0; i<n; i++)           {               cin >> a[i];               flag[a[i]] = 1;           }           for(i = 0; i<n; i++)           {               int t;               t = a[i];               if(!flag[t])                   continue;               while(t>1)               {                   if(t%2)                       t = (t*3+1)/2;                   else                       t = t/2;                   if(t<=1000)                   {                       flag[t] = 0;                   }               }           }           int k = 1;           for(i = n-1; i>=0; i--)           {  www.2cto.com             if(flag[a[i]])               {                   if(k)                   {                       cout << a[i];                       k = 0;                   }                   else                   {                       cout << " " << a[i];                   }               }           }           cout << endl;       }          return 0;   }  

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