1. 程式人生 > 其它 >7-19 支票面額,一個個試唄反正是電腦試

7-19 支票面額,一個個試唄反正是電腦試

技術標籤:PTA基礎題庫程式設計題c語言

題目描述:
一個採購員去銀行兌換一張y元f分的支票,結果出納員錯給了f元y分。採購員用去了n分之後才發覺有錯,於是清點了餘額尚有2y元2f分,問該支票面額是多少?

輸入格式:
輸入在一行中給出小於100的正整數n。

輸出格式:
在一行中按格式y.f輸出該支票的原始面額。如果無解,則輸出No Solution。

輸入樣例1:
23
輸出樣例1:
25.51
輸入樣例2:
22
輸出樣例2:
No Solution

看上去好像是個弱智數學題目,真的動手才發現不是…

思路
確實是用數學公式解決但是不是像計算工資那樣解決,是在yf範圍內窮舉解決,因為公式是兩個未知數的,解不出來,一元等於一百分,所以f,y都不能過百,畢竟他倆都當過“分”

我犯的錯誤
我這裡flag的用法對於新手菜鳥有那麼一點點講究,如果是在for迴圈裡面if,for外面else的話,是連不成一個整套的if,else的,所以在最外面放一個if(flag),flag初始值為1(0也行,if裡面相應做出改變),if條件為真輸出no solution,輸出這個是在for語句迴圈完了,flag值不變的時候,還為1;這裡有個要注意的是在for能輸出時,有答案時,一定要給flag賦值0,不然flag只有一個初始值,會有兩個輸出

此外,一定一定要在if裡面輸出,因為得到了答案後,for語句還會繼續!!yf的值還會變的!如果把if裡面yf賦值ab,再在最外面輸出else的ab,執行會超時(沒有連續的ifelse強迫症患者不舒服導致執行超時┭┮﹏┭┮

#include<stdio.h>
int main()
{
	int n,flag=1;
	scanf("%d",&n);
	int f,y;
	for(f=0;f<=100;f++)
	{
		for(y=0;y<=100;y++)//窮舉,不窮舉做不出來
		{
			if(98*f==199*y+n)
			{
				flag=0;
				printf("%d.%d",y,f);
			}
		}
	}
	if(flag)
	{
		printf("No Solution");
	}
	return 0;	
}