
題目如圖,我的代碼運行會出現錯誤

求教各位大佬我的代碼有哪些大問題,該如何修改
如果要滿足題目時間和容量的要求又要怎么寫
#include <iostream>
#include <string>
using namespace std;
int search(int n ,int i,int R,int *s)
{
for (int x = R; x <= n; x++ ) //前兩項之積,如果為一位數,則為本項的值;如果為兩位數,則十位為本項,個位為后一項。
{
if (s[x-2]*s[x-1]<10)
{
s[x] = s[x - 2] * s[x - 1];
}
else
{
s[x] = s[x - 2] * s[x - 1] / 10;
s[x + 1] = s[x - 2] * s[x - 1] % 10;
}
}
cout << s[n - 1] << endl;
return 0;
}
int main()
{
int k;
cin >> k; //第一行是一個整數K,表示樣例的個數。
//char a, b; //每個樣例的第一行是三個整數a, b, Q(1 ≤ Q ≤ 1, 000), 其中Q表示查詢的次數。
int Q ,n; //數列的第n個元素的輸出值(1 ≤ n ≤ 1, 000, 000, 000)
for (k;k > 0;k--)
{
int size = 2;
int *s = new int [size];
int R = 2;
cin >> s[0] >> s[1] >> Q; //第一項的值為a, 第二項的值為b, (0 ≤ a, b ≤ 9)
for (int i = 1; i <= Q; i++)
{
getchar();
cin >> n;
size = max(size, n);
search(n, i, R, s);
R = max(R, n);
}
delete[] s;
}
system("pause");
return 0;
}
uj5u.com熱心網友回復:
提示是訪問越界了,也就是超出了陣列范圍。uj5u.com熱心網友回復:
1. 第16行,s[x+1], 當x = n 時,是不是已經越界 (因為 第32行 只分配了 n個空間)2. 當 n = 1,000,000,000 時, 你的第39行 size = n, 然后 32行, 分配一個 n 尺寸的陣列。1個int 4個位元組,需要4個G的空間,陣列尺寸是不是太大了
3. 即使開出來 4個G空間的陣列,第7行,你遍歷一個n,時間早超出3000ms了 (一個指令 就算 20 ns, 回圈10^9 次,就20 秒了,何況回圈一次不止20ns)
用 蠻力搜索 行不通。換個思路。
我打出了前面幾十項的資料:
2, 3, 6, 1, 8, 8, 6, 4, 2, 4, 8, 3, 2, 6, 1, 2, 2, 4, 8, 3, 2, 6, 1, 2, 2, 4, 8, 3, 2, 6, 1, 2, 2, 4, 8, 3, 2, 6, 1, 2, 2, 4, 8, 3, 2, 6, 1, 2, 2, 4
觀察資料你就可以發現,資料重復了,(紅色標出來了)第9項到第16項一個周期,之后就是重復了。
就是說這是一個周期函式:周期是8
其他起始值也一樣是周期函式(這個你用計算機很容易證明,因為只有 9*9 = 81種情況,列舉出來就行了--當然題目里面沒要求你去證明)
所以,這道題就轉換成:
1. 找周期,
2, 用模運算: n % 周期
3, 起始到第一個周期的初始序列x0
4. 根據上面的3步,用通項公式計算出最后的結果
完成這些,絕對在你的時間和空間的要求之內
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17607.html
標籤:C++ 語言
上一篇:這個錯誤是怎么回事?
下一篇:求教:vscode remote-ssh時 the remote host's architecture is not support
