/*
* @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