ブルーブリッジカップ:表札制作————C++

11217 ワード

ブルーブリッジカップ:表札制作————C++
テーマ試験問題A:表札制作本題総得点:5点
【問題の説明】青さんは街の住人のために番地を作ります.
この通りには2020人の住民がいて、番地は1から2020番です.
青ちゃんが表札を作る方法は、まず0から9という数字の文字を作り、最後に必要に応じて文字を表札に貼り付けることです.例えば、表札1017は、文字1、0、1、7を順に貼り付ける必要があります.つまり、1文字0、2文字1、1文字7が必要です.
すみません、すべての1番から2020番の表札を作るには、全部で何文字2が必要ですか?
【答えの提出】結果が空欄になった問題で、結果を算出して提出すればいいだけです.本題の結果は1つの整数で、解答を提出する時にこの整数だけを記入して、余分な内容を記入して得点することができません.
問題を解く構想.
直接暴力が解けば終わりだ.———————————————
簡単な方法
#include
using namespace std;
int main()
{
     
	int ans=0,x;
	for(int i=1;i<=2020;i++){
     
		x=i;
		while(x){
     
			if(x%10==2){
     
				ans++;
			}
			x/=10;
		}
	}
	cout<<ans;//  624
	return 0;
}

やり方が愚直である.
#include
using namespace std;
int main()
{
     
	int a,b,c,d,cnt=0;
	for(int i=1;i<=2020;i++){
     
		if(i<10){
     
			if(i==2){
     
				cnt++;
			}
		}
		else if(i>=10&&i<100){
     
			a=i/10,b=i%10;
			if(a==2){
     
				cnt++;
			}
			if(b==2){
     
				cnt++;
			}
		}
		else if(i>=100&&i<1000){
     
			a=i/100,b=i/10%10,c=i%10;
			if(a==2){
     
				cnt++;
			}
			if(b==2){
     
				cnt++;
			}
			if(c==2){
     
				cnt++;
			}
		}
		else{
     
			a=i/1000,b=i/100%10,c=i%100/10,d=i%100%10;
			if(a==2){
     
				cnt++;
			}
			if(b==2){
     
				cnt++;
			}
			if(c==2){
     
				cnt++;
			}
			if(d==2){
     
				cnt++;
			}
		}
	}
	cout<<cnt;//  624
	return 0;
}