c:處理數字
阿新 • • 發佈:2020-08-15
27、程式設計實現下列演算法:任意給一個12位整數;然後,刪除其中8個數字,使得餘下的數字按原次序組成的新數最小,並輸出原來的12位整數和刪除後的4位整數。
解題思路:
這到題和我做的前面幾題相比要短
任意給一個12位整數
還要刪除其中8個數字
用陣列來處理無疑會方便許多
要使餘下的4位數字按原次序組成的新數最小
第1個數字可以從陣列倒數第4位開始
向前比較
找出其中最小的,記錄下標
這就是第一個數字
然後從陣列倒數第3位開始至第一個數字的下標處
向前比較
找出最小的,記錄下標
這就是第2個數字
另外兩個數類似
我給題目標出重點:
這到題題目看著短,
打起程式碼來卻著實費力
我的程式碼如下:
#include<stdio.h> //定義字元數字轉換 int fun(char c){ int a=c-'0'; return a; } int main(){ //用字串輸入這個12位數字 int a[12],i,j,m,n=0; char s[80]; printf("輸入一個12位整數"); scanf("%s",&s); //把字串轉換為整型陣列 for(i=0;i<12;i++) a[i]=fun(s[i]); for(j=1;j<=4;j++){//在這個迴圈下可把4位數求出 m=a[j+7];//m用於求最小的數字 for(i=n;i<j+7;i++){ if(j==1){//第1個數字不能是0 if((a[i]!=0&&a[i]<m)||m==0){ m=a[i]; n=i;//n記錄最小的數字在陣列中的下標 } }else{ if(a[i]<m){ m=a[i]; n=i;//n記錄最小的數字在陣列中的下標 } } } if(m==a[j+7]) n=j+8;//如果遇到倒數的數字正好是最小的,需要處理一下 else n++;//下一個數字從上一個數字的下標下一位開始 printf("%d",m); } printf("\n"); return 0; }
執行測試: