1. 程式人生 > 實用技巧 >c:處理數字

c:處理數字

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;
}

執行測試: