開啟章節選單

11634 Generate random numbers

題目敘述

John von Neumann 在 1946 年提出了一種創建偽隨機數序列的方法。

他的想法被稱為 “中間平方法”,其工作原理如下: 我們選擇一個初始值 a0,其長度最多為 n 的十進位數字。然後我們將值 a0 平方後,添加前導零,直到我們得到長度為 2 × n 的十進位數字,並取中間的 n 個數字形成 ai。 對 i > 0 的每個 ai 重複此過程。在這個問題中,我們使用 n = 4。

Example 1: a0 = 5555, a0^2 = 30858025, a1 = 8580, ... Example 2: a0 = 1111, a0^2 = 01234321, a1 = 2343,...

不幸的是,這個隨機數生成器不是很好。 你的任務是檢查給定的初始值 a0 產生了多少不同的數字。

輸入說明

  • 每行有一個整數 a0 (0 < a0 < 10000)。
  • 數字長度為 4,數字可能有前導零。
  • 如果 a0 = 0 代表輸入結束

輸出說明

請輸出 a0 產生了多少不同的數字 (包含 a0)

解題思路

如果 set 裡面沒有重複的數字:將數字放入 set ,平方後取中間的數重複。

程式碼

#include <bits/stdc++.h>
using namespace std;

int main()
{
  int n;
  while(cin>>n&&n)
  {
    set<int>st;
    while(st.count(n)==0)
    {
      st.insert(n);
      n=n*n/100%10000;
    }
    cout<<st.size()<<endl;
  }
    return 0;
}