Sの連続正数シーケンス
2438 ワード
何海涛:『剣指Offer:名企業面接官精講典型プログラミング問題』:九度OJ
タイトルの説明:http://ac.jobdu.com/problem.php?cid=1039&pid=24
明ちゃんは数学が大好きで、ある日彼は数学の宿題をしているとき、9~16の和を計算するように要求して、彼はすぐに正解が100だと書いた.しかし、彼はこれに満足していない.彼はいったい何種類の連続的な正数シーケンスの和が100(少なくとも2つの数を含む)であるかを考えている.間もなく、彼は別の連続正数と100のシーケンスを得た:18,19,20,21,22.今問題をあなたに任せて、あなたもすぐにすべてとSの連続正数のシーケンスを見つけることができますか?Good Luck!
入力:
複数セットのデータを入力します.
各データ群は、1個の整数Sのみを含む(S<=1000000).Sが負数の場合は入力を終了します.
出力:
各グループのデータに対応して、Sの連続正数シーケンスが存在しない場合は「Pity!」を出力する.そうでなければ、開始数字が小さい順に、Sのすべての和の連続正数シーケンスが出力される.各グループのデータの末尾は「#」で終わります.
サンプル入力:
サンプル出力:
タイトルの説明:http://ac.jobdu.com/problem.php?cid=1039&pid=24
明ちゃんは数学が大好きで、ある日彼は数学の宿題をしているとき、9~16の和を計算するように要求して、彼はすぐに正解が100だと書いた.しかし、彼はこれに満足していない.彼はいったい何種類の連続的な正数シーケンスの和が100(少なくとも2つの数を含む)であるかを考えている.間もなく、彼は別の連続正数と100のシーケンスを得た:18,19,20,21,22.今問題をあなたに任せて、あなたもすぐにすべてとSの連続正数のシーケンスを見つけることができますか?Good Luck!
入力:
複数セットのデータを入力します.
各データ群は、1個の整数Sのみを含む(S<=1000000).Sが負数の場合は入力を終了します.
出力:
各グループのデータに対応して、Sの連続正数シーケンスが存在しない場合は「Pity!」を出力する.そうでなければ、開始数字が小さい順に、Sのすべての和の連続正数シーケンスが出力される.各グループのデータの末尾は「#」で終わります.
サンプル入力:
4
5
100
-1
サンプル出力:
Pity!
#
2 3
#
9 10 11 12 13 14 15 16
18 19 20 21 22
#
: ! S, ++, S, ++( ! ~ ), , !S/2, , S !( ~ )
AC:
#include <stdio.h>
int main()
{
long int s, low, high, half, sum, i;
int flag;
while( scanf("%ld", &s) != EOF )
{
if( s < 0 )
{
break;
}
if( s < 3 )
{
printf("Pity!
");
printf("#
");
continue;
}
low = 1;
high = 2;
sum = 3;
half = s / 2;
flag = 0;
while( low <= half )
{
if( sum > s )
{
sum -= low;
low++;
}
else if( sum < s )
{
high++;
sum += high;
}
else
{
flag = 1;
for( i = low; i < high; i++ )
{
printf("%d ", i);
}
printf("%d
", high);
sum -= low;
low++;
}
}
if( !flag )
{
printf("Pity!
");
}
printf("#
");
}
return 0;
}