pta L1的句號-------------L1-080 乘法口訣數列
阿新 • • 發佈:2022-04-18
L1到此已經刷完了,接下來複盤一下並且明天開始鞏固和接觸資料結構即L2的題目了;
L1-80的題目連結:https://pintia.cn/problem-sets/994805046380707840/problems/1386335159927652359
題目是很淺顯易懂的,並且這道題的思路也不難,在根本上講是一個模擬,反而這種題對我個人而言做起來比字串的處理輕鬆不少;
我們可以採取這樣的方式來處理這個題目:
用兩個變數i,j來表示陣列,i表示的是下標的變化,而j表示的是當前的進度,這來,就完完全全避免了出現數組下標錯位的情況;
而這道題還需要注意的是對於出現乘積為10以上的數的處理,其實也很簡單,用常規的分解就可以了,順帶儲存下標
不得不說,L1這算是給我畫上了一個圓滿的句號,就此,L1的題目就可以告一段落了
接下來就安心複習和學習資料結構啦;
Talk is cheap. Show me the code.
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a1,a2,n; 4 int a[1010]; 5 int main() 6 { 7 std::ios::sync_with_stdio(false); 8 cin>>a1>>a2>>n; 9 a[1]=a1;10 a[2]=a2; 11 int j=3;//從下一個開始,更好處理和儲存 12 for(register int i=3;i<=n;j++) 13 { 14 int temp=a[j-1]*a[j-2];//定義乘積,注意,下標是j,這樣避免下標錯亂 15 int temp1=temp;//防止乘積被破壞 16 if(temp<10)//乘積小於10直接存 17 { 18 a[i++]=temp;//存值並且下標加一 19 } 20 else 21{ 22 while(temp1)//大於等於10的情況,即不是1位數 23 { 24 if(temp1<10) 25 { 26 a[i++]=temp%10;//最後只剩個位數的時候才存 27 } 28 else 29 { 30 a[i++]=temp/10;//先存高位數 31 } 32 temp1=temp1/10; 33 } 34 } 35 } 36 for(register int k=1;k<=n;k++) 37 { 38 cout<<a[k]; 39 if(k<n) 40 cout<<" "; 41 } 42 return 0; 43 }