火星足球赛上, 所有的队员的背后都有一个唯一的号码; 号码编号是从1开始, 最大的号码等于总人数;有2个队员出现了意外, 不能参加比赛; 你所能得到的信息就是 原来的总人数, 现在剩下的人的背后的号码的总和, 以及他们背后的号码的 平方的总和; 你要做的就是去发现那2个队员的背后号码是什么。
每一行输入三个数, N, S, PS(三个数都小2^32); 分别表示原来的总人数,现在剩下的人的背后的号码的总和,号码 的平方的总和; 每个数之后有一个空格, 最后那个数之后没有空格;
把出意外的2个队员的号码输出, 从小到大排列;对每一个输入, 每一行打印一个输出, 输出的2个数之间要有一个空格;最后那个数之后没空格;
Sample Input
65 2059 89959 151 11258 1133002 156 12083 1256817
Sample Output
41 45 75 143 20 143
#include<stdio.h> #include<math.h>
int totalSum(int n) { int i,sum=0; for(i=1;i<=n;i++) { sum+=i; } return sum; }
int powSum(int m) { int i,powsum=0; for(i=1;i<=m;i++) { powsum+=pow(i,2); } return powsum; }
int main() { int n,s,ps,num1,num2,temp; while(scanf("%d %d %d",&n,&s,&ps)!=EOF) { for(num1=1;num1<=n;num1++) for(num2=1;num2<=n;num2++) if((num1+num2)==(totalSum(n)-s)&&(pow(num1,2)+pow(num2,2))==(powSum(n)-ps)&&(num1<num2)) printf("%d %d\n",num1,num2); } return 0; }
#include <stdio.h> #include <math.h> int main() { int N,S,PS; int a,b,sum=0,t=0,m=0,n=0,i; while(3==scanf("%d %d %d",&N,&S,&PS)) { for(i=1;i<=N;i++) { sum=sum+i; } for(i=1;i<=N;i++) { t=t+i*i; } m=sum-S; n=(int) sqrt(2*(t-PS)-(sum-S)*(sum-S)); a=(m+n)/2; b=(m-n)/2; printf("%d %d\n",a>b?b:a,a>b?a:b); sum=0; t=0; m=0; n=0; } return 0; }
#include<stdio.h> int main(void) { unsigned int i,j,n,s,ps,sum1,sum2; while(scanf("%u%u%u",&n,&s,&ps)!=EOF) { for(sum1=sum2=0,i=1;i<=n;i++) { sum1+=i; sum2+=i*i; } for(i=1;i<=n;i++) { j=sum1-s-i; if(i*i+j*j==sum2-ps) { printf("%u %u\n",i,j); break; } } } return 0; }