1065 A+B and C (64bit)
Given three integers A, B and C in (−2^63 ,2^63), you are supposed to tell whether A+B>C.
这道题相比于1011 A+B 和 C,多考虑的溢出问题
当a<0,b<0时可能a+b>0
当a>0,b>0时可能a+b<0
此时不用判断c,c作为给定数一定在范围内
注意sum>=0才能通过测试点3
#include<stdio.h>
int main(){
int n;//测试用例的个数
scanf("%d",&n);
long long a,b,c;
for(int i=1;i<=n;i++){
scanf("%lld %lld %lld",&a,&b,&c);
long long sum=a+b;
if(a>0&&b>0&&sum<0) printf("Case #%d: true\n",i);
else if(a<0&&b<0&&sum>=0) printf("Case #%d: false\n",i);//注意sum>=0才能通过测试点3
else if(sum>c) printf("Case #%d: true\n",i);
else printf("Case #%d: false\n",i);
}
return 0;
}
1010 一元多项式求导
设计函数求一元多项式的导数。
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。
判断是否输入完毕有两种方法:
while(scanf("%s",str[i]) != EOF)//方法一
while(~scanf("%s",str[i++]))//方法二
方法一中:scanf()读入失败时会返回-1,C语言用EOF来表示-1
方法二中:-1的在计算机中用补码表示为全1,~操作表示取反,得到的恰好是0,也能够跳出循环
#include<stdio.h>
int main(){
int a,b,flag=0;//分别表示系数和指数
while(scanf("%d %d",&a,&b)!=EOF){
if(b==0&&flag==0){//当出现零多项式时
printf("%d %d",b,b);
break;
}
else if(b!=0&&flag==0) {//首项
printf("%d %d",a*b,b-1);
flag=1;
}else if(flag==1) //其余项
if(b!=0) printf(" %d %d",a*b,b-1);
//除了零多项式,别的多项式中出现0 0时不输出
}
return 0;
}
1041 考试座位号
每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。
#include<stdio.h>
int main(){
int n,m,temp;
scanf("%d",&n);
int list1[n];
long long list2[n];
long z;//准考证号
int s,k;//试机座位号,考试座位号
for(int i=0;i<n;i++){
scanf("%lld %d %d",&z,&s,&k);
list1[s-1]=k;
list2[s-1]=z;
}
scanf("%d",&m);//待查同学人数
while(m>0){
scanf("%d",&temp);//待查的试机座位号
printf("%ld %d\n",list2[temp-1],list1[temp-1]);
m--;
}
return 0;
}
比较简单的,按部就班写出来就可以