問題1-小藍有很多數字卡片,每張卡片上都是數字 0 到 9_來源第十二屆藍橋杯


 

 

 
/*
 * @Author: buma
 * @Date: 2022-04-05 11:14:20
 * @LastEditors: buma
 * @LastEditTime: 2022-04-05 11:21:05
 * @Description: description
 */
// 卡片
// 問題描述:小藍有很多數字卡片,每張卡片上都是數字 0 到 9。小藍准備用這些卡片來拼一些數,他想從 1 開始拼出正整數,
// 每拼一個,就保存起來,卡片就不能用來拼其它數了。小藍想知道自己能從 1 拼到多少。例如,當小藍有 30 張卡片,
// 其中 0 到 9 各 3 張,則小藍可以拼出 1 到 10,但是拼 11 時卡片 1 已經只有一張了,不夠拼出 11。
// 現在小藍手里有 0 到 9 的卡片各 2021 張,共 20210 張,請問小藍可以從1拼到多少?提示:建議使用計算機編程解決問題。

// 思路分析:

// 分析題目可以知道模擬整個過程即可,我們可以使用一個循環,只要可以拼出當前的數字i那么循環繼續,
// 否則break輸出i - 1(本來是送分題在比賽的時候不知道啥情況模擬這個過程還是算錯了),使用一個方法check來檢查當前數字i是否
// 可以拼出即可,使用check方法來檢查會比較保險,我可能在一開始的時候沒有使用方法來檢查導致所有代碼寫在一起錯了。答案為3181。
#include<stdio.h>

int cnt[10];
int main() {
    int n=2021,i,x,k=1;
    for(i=0;i<10;i++)cnt[i]=n;
    while(1){
        x=k;
        while(x){
            if(cnt[x%10]>0)cnt[x%10]--,x/=10;
            else break;
        }
        if(x)break;
        else k++;
    }
    printf("%d",k-1);
    return 0;
}

python

cards = [2021] * 10
 
 
# 檢查當前的數字n是否是拼出來
def check(n: int):
    while n:
        t = n % 10
        if cards[t] - 1 < 0: return False
        cards[t] -= 1
        n //= 10
    return True
 
 
if __name__ == '__main__':
    i = 1
    while True:
        if check(i):
            i += 1
        else:
            print(i - 1)
            break

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM