PAT 1.模拟

目录

PAT-B 1011.A+B和C (15)

PAT-B 1016. 部分A+B (15)

PAT-B 1026. 程序运行时间(15)

PAT-B 1012. 数字分类 (20)

PAT-B 1018. 锤子剪刀布 (20)



PAT-B 1011.A+B和C (15)

#include<iostream>
using namespace std;

int main() {
	int n,i;
	cin >> n;
	for (i = 0; i < n; i++)
	{
		long long int a, b, c;
		cin >> a >> b >> c;
		if (a + b > c)
			cout << "Case #" << i + 1 << ": true" << endl;
       
           //printf("Case #%d: ture", i + 1);


		else
			cout << "Case #" << i + 1 << ": false" << endl;
	}




	return 0;
}

1.多输入几行,用for循环.

2. [−2​^31​​,2^31​​] ,用long long int 

3.printf的使用:把要输出的变量用%d占位子。

4.%a.bf,a为宽度,b为小数点位数,控制小数点后b位输出

PAT-B 1016. 部分A+B (15)

#include<iostream>
#include<cmath>
using namespace std;

int main() {
	int Da, Pa=0, Db, Pb=0;
	long long int a, b;
	cin >> a >> Da >> b >> Db;
	int sa = 0, sb = 0;
	while(a!=0)
	{
		sa = a % 10;
		if (sa == Da)
			Pa = Da + Pa * 10;     //取出来n个3,pa=3+pa*10
		a /= 10;
	}
	while (b != 0)
	{
		sb = b % 10;
		if (sb== Db)
			Pb = Db + Pb * 10;
		b/= 10;
	}
	cout << Pa + Pb << endl;


	return 0;
}

1.取出来n个相同的m

pa=m+pa*10

PAT-B 1026. 程序运行时间(15)

	#include<iostream>
	#define CLK_TCK 100
	using namespace std;
	int main() {
		int c1, c2;
		cin >> c1 >> c2;
		int n,m;
		m = c2 - c1+50;
		n = m/CLK_TCK;                  //四舍五入就给他加50或者5
		int hh, mm, ss;
		hh = n / 3600;
		n %= 3600;
		mm = n/60;
		n %= 60;
		ss = n;                    
		printf("%02d:%02d:%02d", hh, mm, ss);           //%02d
		
		return 0;

	}

1.要求四舍五入的时候:给原来的数加上50或者5,0.5,再除。

2.小数四舍五入成整数

a=(int)(b+0.5);


3.控制宽度(常用于时间的表示)

%02d             输出不够两位前面用0补齐

 prinrf("%02d:%02d",hh,mm)         09:20

PAT-B1008. 数组元素循环右移问题 (20)

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
    int n,m;
    cin >> n >> m;
    vector<int>a(n);                   //开辟动态数组vector<int>a(n)
    for (int i = 0; i < n; i++)         //字符数组用循环输入输出
        cin >> a[i];
    m %= n;                             //注意m比n大的情况
    reverse(begin(a), begin(a) + n );   //reverse要include<algorithm>
    reverse(begin(a), begin(a) + m );
    reverse(begin(a) + m, begin(a) + n );
    for (int i = 0; i < n - 1; i++)
        cout << a[i] << " ";            //输出时注意最后一个不带空格
    cout << a[n - 1];

    return 0;

}

1.动态数组用vector<int>a(n)

记得include<vector>

2.字符数组只能用循环进行输入输出

3.右移m位:整体反过来,前m位反一下,后面的反一下。

#include<algorithm>

reverse(begin(a),begin(a)+n)

4.输出一串数组,最后一个不带空格

for (int i = 0; i < n - 1; i++)
        cout << a[i] << " ";            //输出时注意最后一个不带空格
    cout << a[n - 1];
5.输出一串变量,最后一个不带空格

用flag,在每个前面输出空格,第一个前面不输出空格

6.考虑m比n大的情况

m%=n

PAT-B 1012. 数字分类 (20)

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
	int n;
	cin >> n;
	vector<int>a(n);
	for (int i = 0; i < n; i++)
	cin >> a[i];
	int a1=0, a2=0, a3=0, a5=0;
	float a4 = 0.0;
	int flag1 = 0;
	for (int i = 0; i < n; i++)
	{
		
		if (a[i] % 2 == 0 && a[i] % 5 == 0)
		{
			a1 += a[i];
			flag1 = 1;
		}
	}
	int flag2 = 0;                       //循环中用到的变量在循环外面定义
	int sgn = 0;
	for (int i = 0; i < n; i++)
	{
		
		if (a[i] % 5 == 1)
		{
			flag2 = 1;
			sgn++;
			if (sgn % 2 != 0)
				a2 += a[i];
			else
				a2 -= a[i];
		}

	}
	int flag3 = 0;
	for (int i = 0; i < n; i++)
	{
		if (a[i] % 5 == 2)
		{
			flag3 = 1;
			a3++;
		}

	}
	int flag4 = 0;
	int sum = 0, num = 0;            //循环中用到的变量在循环外面定义
	for (int i = 0; i < n; i++)
	{
		
		if (a[i] % 5 == 3)
		{
			flag4 = 1;
			num++;
			sum += a[i];
			a4 =( sum * 1.0 )/ num;
		}
		
	}
	int flag5 = 0;
	for (int i = 0; i < n; i++)
	{if(a[i]%5==4)
	{
		flag5 = 1;
		
		if (a[i] > a5)
			a5= a[i];
	}
	}
	if (flag1== 0)                     //!!!if里面是==号,不是赋值!!!
		cout << "N ";
	else
		cout << a1<<" ";
	if (flag2 == 0)
		cout << "N ";
	else
		cout << a2 << " ";
	if (flag3 == 0)
		cout << "N ";
	else
		cout << a3<<" ";
	if (flag4 == 0)
		cout << "N ";
	else
		printf("%1.1f ", a4);
	if (flag5 == 0)
		cout << "N";
	else
		cout << a5;
	

	return 0;

}

1.循环内部要用到的变量在循环外部定义

2.if()括号里是==号,不是赋值号!!!

PAT-B 1018. 锤子剪刀布 (20)

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
	int n;
	cin >> n;
	int awin = 0, bwin = 0, pin = 0;
	int a1 = 0, a2 = 0, a3 = 0;
	int b1 = 0, b2 = 0, b3 = 0;
	for (int i = 0; i < n; i++)
	{
		char a, b;
		cin >> a >> b;
		
		if (a == 'C'&&b == 'J')   
		{
			awin++;
			a1++;
		}
		if (a == 'J'&&b == 'B')
		{
			awin++;
			a2++;

		}
		if (a == 'B'&&b == 'C')
		{
			awin++;
			a3++;
		}
		if (b == 'C'&&a == 'J')
		{
			bwin++;
			b1++;
		}
		if (b == 'J'&&a == 'B')
		{
			bwin++;
			b2++;

		}
		if (b== 'B'&&a == 'C')
		{
			bwin++;
			b3++;
		}

		
		if(a==b)
			pin++;
	}
	cout << awin <<" "<< pin <<" "<< bwin << endl;
	cout << bwin << " "<<pin <<" "<< awin << endl;
	if (a2 > a1&&a2 > a3)
		cout << 'J'<< " ";
	else if (a1 >=a2&&a1 > a3)             //注意平的时候,按字母顺序,根据这个确定带不带等号
		cout << 'C'<< " ";
	else
		cout << 'B' << " ";
	if (b2 > b1&&b2 > b3)
		cout << 'J' ;
	else if (b1 >= b2&&b1 > b3)
		cout << 'C' ;
	else
		cout << 'B' ;



	return 0;

}

1.注意一样多的时候按照字母顺序,根据这个关系,确定取等。

PAT-B 1010. 一元多项式求导 (25)

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
	int a, b;
	int flag = 0;
	while (cin >> a >> b)
	{
		
		if (b != 0)
		{
			if (flag == 1)          //用flag控制空格的输出
				cout << " ";
			cout << a * b << " " << b - 1;
			flag = 1;
		}
		if (flag == 0)             //注意理解题意,是0多项式,所有项为0时输出“0 0”
			cout << "0 0";
	
	}

	return 0;

}

1.输出一串变量,最后一个没有空格:用flag,每一个前面输出空格,第一个前面不输出

2.理解清楚题意

3.不确定输入个数时

while(cin>>a>>b)

总结:

1.输入输出

(1)输入

有个数n的输入:for(i=0;i<n;i++}

没有个数的输入:while(cin>>)                    按ctrl+z+enter退出输入状态

超过30000用long long int

(2)输出

int数组用for循环输入输出。

printf("%a.bf",x)              a为宽度,一般设0.      b为小数点后位数

printf("%02d",x)              时间格式,不够两位,前面补0.        例:  02:03

四舍五入        加50,5,0.5.

a=(int)(b+0.5);

格式控制:

2.1数组

for (int i = 0; i < n - 1; i++)
        cout << a[i] << " ";            //输出时注意最后一个不带空格
    cout << a[n - 1];

2.2  flag

2.3  for()           if(i>0)cout<<" ";

3.debug

3.1    for循环内需要用的变量在循环外定义

3.2    if()判断条件是等于,不是赋值

3.3    数组和循环结合在一起,看最大的时候是否越界

3.4    string用于循环要先 a.append(n,'0')

4.n位数右移m位

考虑m大于n:m%=n.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值