問題癥結:
該題不能像抽屜原理2中,直接開一個1000多的數組來存放答案,直接按下標索引,按照這個方法,需要開的數組太大,1,000,000,000,內存撐不住。
解決辦法:
題目要求直接取最後一位數,所以,10個數字必然至少有1個數字會重複出現,找出這個週期。找週期的方法:不能用剛開始的這一個數字作爲開始找,因爲最初的數字,在不穩定之前不一定會反覆出現。故而該程序就取第10個數字(這個肯定會在後面重復出現的,故而可選),這裏找出了週期。後面即將第10個數字作爲基址,按照週期來查找。
題目背景:
代碼:
#include<iostream>
using namespace std;
int main()
{
int n,m;
int val;
cin>>n;
int arr[32];
int dis;
while(n--)
{
cin>>m;
int mm = m;
m = m % 10;
val = m;
int i;
int st;
for(i=0; i<32; i++)
{
arr[i] = val;
val = val*m%10;
}
for(i=11; i<32; i++)
{
if(arr[i] == arr[10])
{
dis = i - 10;
break;
}
}
for(i=0; i<32; i++)
{
if(arr[i] == arr[10])
{
st = i;
break;
}
}
if(mm < 32)
{
cout<<arr[mm -1]<<endl;
}
else
{
i = (mm - 1 - st) % dis;
cout<<arr[st + i]<<endl;
}
}
return 0;
}