21考研复试上机常见题型、技巧与方法

第一章 入门模拟

  1. 题目要求输入T个数
while(T--)
{
	cout<<T;
}
  1. 题目要求输出用空格隔开,最后一个不带空格
for(int i = 0; i < n; i++)
{
	if(i)
		cout<<" "<<a[i];
	else
		cout<<a[i];
}
  1. scanf对其他格式符(如%d,%s)的输入以空白符(即空格、换行等)为读入结束标志,而scanf的%c格式可以读入空格与换行,因此,在scanf完一个整数后,如果使用gets(gets以换行为结束标志,可以读入空格),%c,getline(cin, str)(以换行为结束标志,可以读入空格),需先用getchar接收整数后面的换行或者空格,而用%d%s或者cin读入整形+字符串则不需要吸收换行符。
int n;
char c;
scanf("%d", &n);
getchar();
scanf("%c", &c);
  1. 关于溢出:两个正数之和等于负数或者两个负数之和等于正数,那么就是溢出
    对于给定区间,区间内两个数运算的溢出边界:
    两个最大值相加溢出的边界:左边界为区间左端点,右边界为两数之和对区间长度取余。
    两个最小值相加的边界:右边界为区间右端点,左边界为两数之和对区间长度取余。
//判断a + b > c 是否成立
		scanf("%lld%lld%lld", &a, &b, &c);
        res = a + b;
        if(a > 0 && b > 0 && res < 0)//溢出
            flag = true;
        else if(a < 0 && b < 0 && res >= 0)//溢出
            flag = false;
        else if(res > c)
            flag = true;
        else
            flag = false;
  1. 输入到文件末尾
	int m[1000];
	int num = 0;
    while(scanf("%d", &m[num]) != EOF)
        num++;
  1. 输入特殊格式,可不用string类型存储
	struct person
	{
   		char name[100];
    	int year, month, day;
	};
	person a;//输入格式为:Tom 2020/01/01
    scanf("%s%d/%d/%d", a.name, &a.year, &a.month, &a.day);
  1. 日期或时间比大小
struct time
{
    int hour;
    int minute;
    int second;
};
bool cmp(time t1, time t2)//日期的比较换成year, month, day即可
{
    if(t1.hour != t2.hour)
        return t1.hour > t2.hour;
    if(t1.minute != t2.minute)
        return t1.minute > t2.minute;
    return t1.second > t2.second;
}
  1. 题目中要输入一个对象的多个参数时,可以考虑构建结构体,很多时候非常方便
  2. 进制转换
int n, b;//整数n转化成b进制数
scanf("%d%d", &n, &b);
int result[100] = {0}, len = 0;
do{
    result[len++] = n % b;
    n /= b;
}while(n);
  1. 将数字拆分用数组存储
while(sum)
{
	nums[len++] = sum % 10;
	sum /= 10;
}

第二章 算法初步

  1. c++ sort排序cmp函数,对结构体进行一级、二级、三级…排序
struct person{
    int number;//准考证号
    int de;//德分
    int cai;//才分
    int sum;//总分
    int leibie;//类别
};
bool cmp(person a, person b)//PAT B1015德才论 先按类别由小到大排序,类别相同按总分由大到小排序,总分相同按德分由大到小排序,德分相同按准考证号由小到大排序
{
    if(a.leibie != b.leibie)
        return a.leibie < b.leibie;
    else if(a.sum != b.sum)
        return a.sum > b.sum;
    else if(a.de != b.de)
        return a.de > b.de;
    else
        return a.number < b.number;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值