藍橋杯—不同字串(C語言解法)
阿新 • • 發佈:2022-04-01
題目描述
一個字串的非空子串是指字串中長度至少為 1 的連續的一段字元組成的串。
例如,字串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 個。
注意在計算時,只算本質不同的串的個數。
請問,字串0100110001010001 有多少個不同的非空子串?
答案提交
這是一道結果填空的題,你只需要算出結果後提交即可。
本題的結果為一 個整數,在提交答案時只填寫這個整數,填寫多餘的內容將無法得分。
思路
- 因為C語言中處理字串太麻煩了,所以可以將輸入轉化為整數,然後存入陣列,判重也更容易了
程式碼
#include<stdio.h> int res; int main(){ int i,len,flag,sum=0; char s[20]; int num1[20]; long long int num2[200]; for(i=0;;i++){ scanf("%c",&s[i]); if(s[i]=='\n')break; //num1[i]=s[i]-96;//示例,轉化為整數 if(s[i]=='0')num1[i]=9;//0 1轉換為數字,任意都可 else num1[i]=8; } len=i; for(i=0;i<len;i++){ sum=0;//記錄從i開始到j結束的和,方便判重 for(int j=i;j<len;j++){//遍歷輸入的資料陣列,i表示開始,j表示結束 flag=1; sum=sum*10+num1[j];//直接加會漏掉,aa 和 b 都是2會漏 for(int k=0;k<res;k++){//儲存結果的陣列 if(sum==num2[k]){ flag=0; break; } }if(flag){num2[res++]=sum;} } } printf("%d",res); return 0; }