C语言经典算法 21-30
生活随笔
收集整理的這篇文章主要介紹了
C语言经典算法 21-30
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 21 一個有序的數組插入一個數
- 22 將一個數組逆序輸出
- 23 報號 求最后是誰
- 24 寫一個統計字符串長度的函數
- 25 八進制轉換為十進制
- 26 判斷一個素數能被幾個 9 整除
- 27 輸入一組數據,查詢某個數據出現的次數(哈希存儲)
- 28 計算字符串中子串出現的次數
- 29 簡單的用戶登陸系統
- 30 進度條加載小程序
21 一個有序的數組插入一個數
題目:有一個已經排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中。程序分析:首先判斷此數是否大于最后一個數,然后再考慮插入中間的數的情況, 插入后 此元素之后的數,依次后移一個位置。代碼如下:
#include<stdio.h> int main(void) {int a[11]={22,34,57,76,88,90,91,99,100,123};int i;int j=0;int temp=0;printf("請輸入你要插入的數據:");scanf("%d",&temp);if(temp<a[9]){for(i=0;i<11;i++){if(temp<a[i])//找到要插入的位置{for(j=10;j>i;j--){a[j]=a[j-1];}a[i]=temp;break;}}}else//插入的數最大,直接在后面插入{a[10]=temp;}for(i=0;i<11;i++){printf("%d ",a[i]);}printf("\n");return 0; }22 將一個數組逆序輸出
題目:將一個數組逆序輸出。 程序分析:用第一個與最后一個交換。 當然你也可以直接倒著輸出,不過這樣對于這道題沒有啥意義。代碼如下:
#include<stdio.h> int main(void) {int a[5]={1,2,3,4,5};int i;int N=5;int temp=0;for(i=0;i<N/2;i++){temp=a[i];a[i]=a[N-1-i];a[N-1-i]=temp;}for(i=0;i<5;i++){printf("%d ",a[i]);}return 0; }23 報號 求最后是誰
題目:有 n 個人圍成一圈,順序排號。從第一個人開始報數(從 1 到 3 報數),凡報到 3 的人退出 圈子, 問最后留下的是原來第幾號的那位。 程序分析: 想法很簡單,就是 變量 sum 從 1開始到 3 ,如果是3 的倍數,a[i] 就是變為零 , 也就是退出的意思,i 一直都是從1到 最后一個數增加的,也就是形成了一個圈了的!代碼如下:
#include<stdio.h> #include<string.h> int main() {int n;int i;while(scanf("%d",&n)==1)//輸入總共的人數{int a[200];for(i=1;i<=n;i++)a[i]=i;int su=n,sum=1;while(1){for(i=1;i<=su;i++){if(a[i]==0)//代表這個人已經出去了continue;if(sum%3==0)//代表要出去的人{a[i]=0;n--;//總人數減1sum=0;}sum++;}if(n==1)//只有一個人的時候,跳出循環break;}for(i=1;i<=su;i++){if(a[i]!=0)printf("%d\n",i);}} return 0; }24 寫一個統計字符串長度的函數
題目:寫一個函數,求一個字符串的長度,在 main 函數中輸入字符串,并輸出其長度代碼如下:
#include<stdio.h> int length(char a[]); int main(void) {char a[200];int n=0;scanf("%s",a);n=length(a);printf("%d\n",n);return 0; } int length(char a[]) {int i=0;while(a[i]!='\0'){i++;}return i; }25 八進制轉換為十進制
題目:八進制轉換為十進制代碼如下:
#include<stdio.h> void main() {char*p,s[6];int n;p=s; gets(p);n=0;while(*(p)!='\0'){n=n*8+*p-'0'; p++;} printf("%d",n); }26 判斷一個素數能被幾個 9 整除
判斷一個素數能被幾個 9 整除代碼如下:
#include<stdio.h> void main() {long int m9=9,sum=9;int zi,n1=1,c9=1;scanf("%d",&zi);//輸入的素數while(n1!=0){if(!(sum%zi))//判斷可不可以整除n1=0;else {m9=m9*10;sum=sum+m9;c9++; }} printf("%ld,canbe divided by %d\"9\"",sum,c9);printf("\n"); }27 輸入一組數據,查詢某個數據出現的次數(哈希存儲)
讀入N名學生的成績,將獲得某一給定分數的學生人數輸出。輸入描述: 測試輸入包含若干測試用例,每個測試用例的格式為第1行:N 第2行:N名學生的成績,相鄰兩數字用一個空格間隔。 第3行:給定分數當讀到N=0時輸入結束。其中N不超過1000,成績分數為(包含)0到100之間的一個整代碼如下:
#include<stdio.h> #include<algorithm> int main() {int n;while(scanf("%d",&n)!=EOF){int Hash[101]={0};//利用哈希存儲每個分數出現的次數for(int i=0;i<n;i++){int x;scanf("%d",&x);//定義的X相當于輸入的每個分數,然后利用哈希進行統計Hash[x]++;}int x;scanf("%d",&x);//輸入你需要查詢的分數統計相應的人數 利用哈希返回printf("%d\n",Hash[x]);}return 0;}28 計算字符串中子串出現的次數
計算字符串中子串出現的次數代碼如下:
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() {int i,j,k,TLen,PLen,count=0;char T[50],P[10];printf("請輸入兩個字符串,以回車隔開,母串在前,子串在后:\n");gets(T);gets(P);TLen=strlen(T);PLen=strlen(P);for(i=0;i<=TLen-PLen;i++){for(j=0,k=i;j<PLen&&P[j]==T[k];j++,k++);if(j==PLen)count++;}printf("%d\n",count);system("pause");return 0; }29 簡單的用戶登陸系統
用戶名:李華 密碼:123456 #include<stdio.h> #include<conio.h> #include<string.h> int main(void) {char name[20];char password[20];char a;int i=0;printf("請輸入你的姓名:");scanf("%s",name);printf("請輸入密碼:");while( (password[i]=getch()) != 13 )//getch()返回值是一個鍵值,回車的鍵值是13{i++;printf("*");//隱藏我們的密碼}password[i]='\0';//把最后的回車變成結束符printf("\n");if(( strcmp(name,"李華")==0 ) && ( strcmp(password,"123456")==0 )){printf("登陸成功\n");}else{printf("登陸失敗\n");} }30 進度條加載小程序
進度條加載小程序代碼如下:
#include<stdio.h> #include<windows.h> int main(void) {int i=0;int j=0;for(i=1;i<=20;i++){for(j=1;j<=i;j++){printf("--");}printf(">%d%%",i*5);Sleep(360);if(i<20)system("cls");}printf("\n加載完成\n");return 0; }C語言經典算法 1-10 點擊跳轉
C語言經典算法 11-20 點擊跳轉
總結
以上是生活随笔為你收集整理的C语言经典算法 21-30的全部內容,希望文章能夠幫你解決所遇到的問題。