新生練習(二) 題解
阿新 • • 發佈:2018-12-30
Problem A:字典序
#include<stdio.h> #include<string.h> int main(void){ int n; char t[110]; char s[110][110]; /*因為是字串進行比較 這裡使用字串陣列 */ scanf("%d",&n); for(int i=0;i<n;i++){ scanf(" %s",s[i]); //空格吸收回車符 } for(int i=0;i<n-1;i++){ //for迴圈實現每個字串與排在自己後的字串相比較 for(int j=0;j<n-1-i;j++){ if(strcmp(s[j],s[j+1])>0){ //說明第j個字串的字典序更大 /*strcmp()函式比較規則: 對於兩個字串從左至右按ASCII碼大小逐個字母比較 直到遇到不同字母或者字串結束符'\0' 若出現不同的字元,按第一次不同字元比較 若 字串1==字串2 返回0 若 字串1>字串2 返回正整數 若 字串1<字串2 返回負整數 */ strcpy(t,s[j]); strcpy(s[j],s[j+1]); //注意 字串的交換要用到strcpy()函式 strcpy(s[j+1],t); /*strcpy()實現字串的複製*/ } } } for(int i=0;i<n;i++){ //輸出排好序的字串陣列 printf("%s\n",s[i]); } return 0; }
Problem B:超市
#include<stdio.h> int main(void){ int n,m; int a[1010]={0}; //初始化 因為0<n<1000 所以a[]開到1010 scanf("%d%d",&n,&m); for(int i=0;i<n;i++){ int id; scanf("%d",&id); // 輸入n個id a[id]=1; //改變a[]表示貨物存在 } while(m--){ //查詢是否能買到 int x; scanf("%d",&x); if(a[x]==1){ //每種貨物無限個 printf("yes\n"); } else{ printf("no\n"); } } return 0; }
Problem C:小寫字串
#include<stdio.h> #include<string.h> //strlen()的標頭檔案 int main(void){ char s[1010]; scanf("%s",s); //字串所以不用取地址符& int len=strlen(s); //求字串的長度 for(int i=0;i<len;i++){ if(s[i]>='A'&&s[i]<='Z'){ //根據ASCII碼值來判斷字串中是否含有大寫字元 s[i]=s[i]-'A'+'a'; //將大寫轉換成小寫 /*或者根據大小寫字母ASCII碼值差 32 且小寫字母的ASCII碼值>大寫字母的ASCII碼值 用 s[i]=s[i]+32;來計算 */ } } for(int i=0;i<len;i++){ //輸出 printf("%c",s[i]); } printf("\n"); //換行 return 0; }