開啟章節選單
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; }