Problem Description
You are given N baskets of gold coins. The baskets are numbered from 1 to N. In all except one of the baskets, each gold coin weighs w grams. In the one exceptional basket, each gold coin weighs w-d grams. A wizard appears on the scene and takes 1 coin from Basket 1, 2 coins from Basket 2, and so on, up to and including N-1 coins from Basket N-1. He does not take any coins from Basket N. He weighs the selected coins and concludes which of the N baskets contains the lighter coins. Your mission is to emulate the wizard's computation.
Input
The input file will consist of one or more lines; each line will contain data for one instance of the problem. More specifically, each line will contain four positive integers, separated by one blank space. The first three integers are, respectively, the numbers N, w, and d, as described above. The fourth integer is the result of weighing the selected coins. N will be at least 2 and not more than 8000. The value of w will be at most 30. The value of d will be less than w.
Output
For each instance of the problem, your program will produce one line of output, consisting of one positive integer: the number of the basket that contains lighter coins than the other baskets.
Sample Input
10 25 8 1109 10 25 8 1045 8000 30 12 959879400
Sample Output
2 10 50
题目大意:有N个篮子,从1至N开始标号,每个篮子里都装有金币,其中有一个篮子里的金币比较特别,它里面每个金币的重量是 w-d ,其他篮子里的每个金币的重量是 w。
现在,有一个人分别从1至N-1号篮子分别拿出1,2,······N-1个金币(不从N号篮子拿出金币),然后称出它们的质量,最终求哪个篮子里的金币是较轻的。
思路:计算N*(1+N-1)/ 2 个金币应有的重量,然后与实际重量相减,若结果是0,则N号篮子里的金币较轻;若结果不为0,就让差值除以d,得到较轻金币的个数,即篮子的编号。
#include<stdio.h>
int main()
{
int N,w,d,r;
while(scanf("%d%d%d%d",&N,&w,&d,&r)==4)
{
int sum=0;
sum=(1+N-1)*(N-1)/2*w;
int t;
t=sum-r;
if(t==0)
printf("%d\n",N);
else
printf("%d\n",t/d);
}
return 0;
}