1005. 繼續(3n+1)猜想 (25)

卡拉茲(Callatz)猜想已經在1001中給出了描述。在這個題目裏,情況稍微有些複雜。

當我們驗證卡拉茲猜想的時候,爲了避免重複計算,可以記錄下遞推過程中遇到的每一個數。例如對n=3進行驗證的時候,我們需要計算3、5、8、4、2、1,則當我們對n=5、8、4、2進行驗證的時候,就可以直接判定卡拉茲猜想的真僞,而不需要重複計算,因爲這4個數已經在驗證3的時候遇到過了,我們稱5、8、4、2是被3“覆蓋”的數。我們稱一個數列中的某個數n爲“關鍵數”,如果n不能被數列中的其他數字所覆蓋。

現在給定一系列待驗證的數字,我們只需要驗證其中的幾個關鍵數,就可以不必再重複驗證餘下的數字。你的任務就是找出這些關鍵數字,並按從大到小的順序輸出它們。

輸入格式:每個測試輸入包含1個測試用例,第1行給出一個正整數K(<100),第2行給出K個互不相同的待驗證的正整數n(1<n<=100)的值,數字間用空格隔開。

輸出格式:每個測試用例的輸出佔一行,按從大到小的順序輸出關鍵數字。數字間用1個空格隔開,但一行中最後一個數字後沒有空格。

輸入樣例:
6
3 5 6 7 8 11
輸出樣例:

7 6

#include<iostream>
using namespace std;
#define maxn 10000
int *f(int a[], int n)
{
  int* temp = new int[maxn];
  int i = 0;
  while (n != 1)
  {
    if (n % 2 == 0)
    {
      n = n / 2;
      a[i] = n;
      i++;
    }
    else
    {
      n = (3 * n + 1) / 2;
      a[i] = n;
      i++;
    }
  }
  for (int j = 0; j < i; j++)
  {
    temp[j] = a[j];
  }
  return temp;

}
void sort(int a[], int n)
{//排序
  int i, j, temp;
  for (i = 0; i<n; i++)
         for (j = i + 1; j<n; j++)
         {
             if (a[i]<a[j])
             {
                 temp = a[i];
                 a[i] = a[j];
                 a[j] = temp;
             }
         }
     for (int i = 0; i < n; i++)
     {//格式
       if (a[i] != 0 && a[i + 1] != 0)
       {
         cout << a[i] ;
         if (i != n - 1)
         {
           cout << " ";
         }
       }
       else if (a[i + 1] == 0)
       {
         cout << a[i] << endl;
         break;
       }
     }
}
int main(void)
{
  int n;
  int k;
  int a[maxn];
  cin >> n;
  int d[maxn], left[maxn];
  
  for (int i = 0; i < n; i++)
  {
    cin >> d[i];
  }
  for (int i = 0; i < n; i++)
  {
    left[i] = d[i];
  }
  k = 0;
  for (int i = 0; i < n; i++)
  {
    int *c = f(a, d[i]);
    for (int m = 0; m < n; m++)
    {
      for (int j = 0; j < sizeof(c); j++)
      {//判斷輸入的數據是否與計算過後的數據相同的
        if (left[m] == c[j])
        {//如果有,則將這個數據的賦值爲0
          left[m] = 0;
        }
      }

    }
  }
  sort(left,n);
  
  return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章