复试准备-day6-CCF

文章包含三个编程题目,分别涉及处理整数加法的溢出问题,一元多项式的求导计算,以及根据试机座位号查找考试座位号的问题。解决这些问题需要理解和应用基本的算法及数据处理技巧。
摘要由CSDN通过智能技术生成

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;
}

比较简单的,按部就班写出来就可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值