ページ 11

1からXまでの数値の中で、特定の数値の数を計測する方法

Posted: 2015年12月14日(月) 23:41
by ピーちゃん
C言語のプログラミングを勉強しています。
参考書の、for文の使い方の章で「1からXまでの数値の中で、特定の数値の数(=今回は1)を計測する」という問題があり組んでみました。
一応、答案通りにはなりましたが、改善案を教えて欲しいと思い投稿しました。
添削をお願いしたいです。

コード:

#include <stdio.h>

int main(void)
{
	int len = 0;
	int i;
	int count = 0;

	scanf("%d", &len);

	for(i = 1; i <= len; i++)
	{
		if(i / 10 == 1)
		{
			count++;
		}
		if(i % 10 == 1)
		{
			count++;
		}
	}
	printf("\n%d\n", count);

	return 0;
}
よろしくお願いします。

Re: 1からXまでの数値の中で、特定の数値の数を計測する方法

Posted: 2015年12月14日(月) 23:56
by みけCAT
これは、Integer in Integer | Aizu Online Judge
の特殊な場合に近いですね。(定数で割った余りではなく、数そのものを求めるという点が異なりますが)
動的計画法またはメモ化再帰を使い、工夫すると計算量を落とせるでしょう。

この問題の自分の答案
上限・下限値の処理に気をつけながら、クエリの数を探し、見つかったらその後の数のパターン数を求め、加算するという方針です。

Re: 1からXまでの数値の中で、特定の数値の数を計測する方法

Posted: 2015年12月15日(火) 00:20
by box
Xが100以上の場合、正しい答えを得ますか?
どうも2桁以内だけに対応しているように見えて仕方がありません。
見間違いかな?

Re: 1からXまでの数値の中で、特定の数値の数を計測する方法

Posted: 2015年12月18日(金) 23:20
by ピーちゃん
99までしか対応していないのは、参考書の入力例には2ケタしかなかったためです。
そう記載すればよかったですが、忘れていました、すみません・・・。

ありがとうございます!