PAT 刷题一些技巧总结(C/C++)

PAT 刷题一些技巧总结(C/C++)

作为一名弱鸡,本人技术较菜,木怪。

1. 输入格式

1.1 输入样例1

例如,输入3名同学的成绩,第一行为几名同学,后面为成绩。

3
45
54
33

可以使用这样的代码:

cin>> n;
while(n--){
	dosomething();
}

或者这样操作:

cin>> n; //scanf("%d",&n);
for(int i = 0; i < n; i++){
	dosomething();
}

1.2 输入样例2

PAT1033 旧键盘打字输入样例:

7+IE.
7_This_is_a_test.

可以使用getline来获取每行字符串。

string s1,s2;
getline(cin,s1);
getline(cin,s2);
或者
cin >> s1 >> s2;

1.3 输入样例3

1034 有理数四则运算 输入格式中存在字母和符号交叉:

2/3 -4/2

可以这样进行处理要得到的数字,在scanf中穿插使用空格和反斜杠:

int a, b, c, d;
scanf("%d/%d %d/%d", &a, &b, &c, &d);

1037 在霍格沃茨找零钱输入样例 :

10.16.27 14.1.28
scanf("%d.%d.%d %d.%d.%d", &a, &b, &c, &m, &n, &t);

1.4 读到文件或某个字符输入结束

  1. 读到文件的结尾,程序自动结束
    C语言版:
while( ( scanf(“%d”,&a) ) != -1 )
while( ( scanf(“%d”,&a) ) != EOF)
while( ( scanf(“%d”,&a) ) == 1 )
while( ~( scanf(“%d”,&a) )  )

C++版:

int c;
while ((c = cin.get()) != EOF)
  1. 读到一个0时,程序结束
while( scanf(“%d”,&a) ,a)

1.5 输入后多余空格

1067.试密码 (20 分)第一行要求输入Correct%pw 3,题目中在3后多余一个空格,可以使用以下代码:

cin>> str>> num;
getchar();

2 输出问题

输出格式和输入基本相同,不做详细介绍。

可能有些同学会纠结末尾无空格,例如。

2 3 4 5 3 

如果上述数据存放在一个a[5]数组中,可以这样实现:

for(int i = 0; i < 5; i++)
	printf("%d%s",a[i],i == 5-1 ? "" : " ");

3 数字统计问题

如:1021 个位数统计1038 统计同成绩学生可以巧用数组下标来节省空间,如1038统计同成绩,因为成绩不超过100,所以可以使用a[100]数组来进行数据处理。

int main()
{
	int n, under, a[101] = {0}, k, target;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> under;
		a[under]++;
	}
	cin >> k;
	for (int i = 0; i < k; i++) {
		cin >> target;
		printf("%d%s", a[target], i == k - 1 ? "" : " ");
	}
	return 0;
}

如上述代码中,输入成绩为80,a[80]就会的值就会+1,这样既可以节省空间又可以便于输出。

4 便于使用的函数

4.1 辗转相除法求最大公约数

int gcd(int a, int b) {
	return b == 0 ? a : gcd(b, a%b);
}

4.2 printf函数打印百分号

已级中,有一题需要打印百分号(%),使用:

printf("%%");		// 输出一个百分号

4.3 cctype中好用的函数

头文件:#include<cctype>
isalnum 是字⺟母数字;isalpha是字⺟母; isdigit 是数字; isupper 是⼤大写字
⺟母; islower 是⼩小写字⺟母;isblank 是空格/tab键; isspace 是空格/tab键/回⻋车

5 注意的点

5.1 浮点数使用double

例如:乙级 1088.三人行等,浮点数定义:

float f;	//不使用这种
double f;	//使用double型

未完待续……

  • 6
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值