數組與字符串的習題
阿新 • • 發佈:2019-04-19
正整數 sca 常量數組 hist || 完成 是否 clas ons
WERTYU
- 常量數組:並不需要指明大小,編譯器可以完成計算
回文詞
- 使用常量數組
- 不會輸入空格,可以安全的使用scanf
- isalpha, idigit, isprint...在ctype.h中定義,toupper, tolower等工具可以用來轉換大小寫。
猜數字遊戲
- scanf("%d",&a[i]);
生成元
x+x的各個數字之和得到y,說明x是y的生成元,給出n(1,100000),求最小生成元。無解輸出0;
- 只需要一次枚舉100000內的所有正整數,標記"m+m的各個數字之和得到的數有一個生成元是m",最後查表
- 即找出這個數是哪個數的最小生成元。
-
#include<stdio.h> #include<string.h> #define maxn 1000005 int ans[maxn]; int main() { int T,n; memset(ans,0,siezeof(ans)); for(int m=1;m<maxn;m++) { int x=m,y=m; while(x>0) { y+=x%10; x/=10; }
環狀序列
- Q: 長度為n(n<=100)的環狀DNA串(只含A,C,G,T),任務:輸出改環狀串的最小表示。
- 字典序:字符串在字典中的順序,對於兩個字符串,
- 第一個位置開始比較,某個位置字符不同時,字符較小的串,字典序較小
- 較短的字符串的字典序小(hi<history)
-
#include<stdio.h> #include<string.h> #define maxn 105 //判斷p是否比q的字典序小 int less(const char*s,int p,int q) { int n=strlen(s); for(int i=0;i<n;i++) { if(s[(p+i)%n]!=s[(q+i)%n]) //如果遇到字符不同,就進行判斷; { //註意,循環的可以用"...%n"來進行循環。 return (s[(p+i)%n<s[(q+i)%n]]); //如果p<q,就返回1,其他情況返回0; } } return 0; } int main() { int T; char s[maxn]; scanf("%d",&T); while(T--) { scanf("%s",s); int ans=0; int n=strlen(s); for(int j=0;j<n;j++) { if(less(s,j,ans)) //不斷判斷更新ans的值 ans=j; } for(int i=0;i<n;i++) { putchar(s[(i+ans)%n]); //用putchar一個個輸出字符 } putchar(‘\n‘); } return 0; }
- 註意有putchar(),和用"%n"來循環
數組與字符串的習題