PAT 1084 外觀數列 (20 分)C語言版
阿新 • • 發佈:2018-11-23
1084 外觀數列 (20 分)
解題思路:
設定兩個陣列,分別存放相鄰兩個序列,其中s1存放前一個,s2存放後一個,首先可確定的是兩個陣列的第一個元素,即s1[0] = s2[0] = d。
從s1得到s2:如果s1[i] == s1[i-1]的話,那計數cnt+1;如果不等於的話,那麼s2[p]就等於cnt,即s1[i-1]的計數,然後s2[p+1]=s1[i],即s1的下一個元素,並將其計數置為1;直到迴圈結束。迴圈設定為i<len,即小於s1的實際長度。
#include<stdio.h> int main() { int d, n; scanf("%d %d", &d, &n); int s1[10000], s2[10000]; s1[0] = s2[0] = d; int cnt, p, len=1;//p為s2下標,len為s1 s2的實際長度,cnt是相同元素的計數。 while(--n) { cnt = 1; p = 1; for(int i=1;i<len;i++) { if(s1[i] == s1[i-1]) { cnt++; } else { s2[p] = cnt; p++; s2[p] = s1[i]; p++; cnt = 1; //新的元素計數從1開始 } } s2[p] = cnt; //最後一個元素的計數 len = p+1; //len比下標大1 for(int i=0;i<len;i++) { s1[i] = s2[i]; } } for(int i =0;i<len;i++) { printf("%d", s1[i]); } }