1. 程式人生 > 其它 >pta L1的句號-------------L1-080 乘法口訣數列

pta L1的句號-------------L1-080 乘法口訣數列

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 }