PAT (Basic Level) Practice (中文)C/C++练习(一)15分整理

PTA(Basic Level) Practice (中文):https://pintia.cn/problem-sets/994805260223102976/problems

目录

1001 害死人不偿命的(3n+1)猜想 (15 分)   1006 换个格式输出整数 (15 分)    1011 A+B 和 C (15 分)

1016 部分A+B (15 分)                                1021 个位数统计 (15 分)               1026 程序运行时间 (15 分)

1031 查验身份证 (15 分)                            1036 跟奥巴马一起编程 (15 分)    1041 考试座位号 (15 分)

1046 划拳 (15 分)                                       1051 复数乘法 (15 分)                   1056 组合数的和 (15 分)

1061 判断题 (15 分)                                   1066 图像过滤 (15 分)                   1071 小赌怡情 (15 分)

1076 Wifi密码 (15 分)                                 1081 检查密码 (15 分)                   1086 就不告诉你 (15 分)

1091 N-自守数 (15 分)


1001 害死人不偿命的(3n+1)猜想 (15 分)

#include<iostream>

using namespace std;

int main()
{
	int n, count=0;
	cin >> n;
	if (n > 1000)
		return -1;
	while (n != 1)
	{
		if (n % 2 == 0)
		{
			n /= 2;
		}
		else
		{
			n = (3 * n + 1) / 2;
		}
		count++;
	}
	cout << count;

	return 0;
}

1006 换个格式输出整数 (15 分)

#include<iostream>
using namespace std;

int main()
{
	int n,i,j,k;	//数,百,十,个
	cin >> n;
	if (n > 999)
	{
		return -1;
	}
	else if (n > 99)	//三位数
	{
		i = n / 100;
		j = n / 10 % 10;
		k = n % 10;
		for (int l = 0; l < i; l++)
		{
			cout << 'B';
		}
		for (int l = 0; l < j; l++)
		{
			cout << 'S';
		}
	}
	else if (n > 9)	//两位数
	{
		j = n / 10;
		k = n % 10;
		for (int l = 0; l < j; l++)
		{
			cout << 'S';
		}
	}
	else if (n > -1)	//个位数
	{
		k = n;
	}
	else
		return -1;
	for (int l = 1; l <= k; l++)
	{
		cout << l;
	}
	return 0;
}

 1011 A+B 和 C (15 分)

#include<iostream>
using namespace std;

#define SIZE 10
int main()
{
	int T;
	long A[SIZE],B[SIZE],C[SIZE];
	cin >> T;
	if (T <= 0)
		return 0;
	for (int i = 0; i < T; i++)
	{
		cin >> A[i] >> B[i] >> C[i];
	}
	for (int i = 0; i < T; i++)
	{
		if (A[i] + B[i] > C[i])
		{
			if(i>0)
				cout << endl;
			cout << "Case #" << i+1 << ": true";
		}
		else
		{
			if (i > 0)
				cout << endl;
			cout << "Case #" << i+1 << ": false";
		}
		
	}
	return 0;
}

1016 部分A+B (15 分)

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

int main()
{
	char A[11], B[11];
	char Da, Db;
	int count = 0;
	int Pa = 0, Pb = 0;
	cin >> A >> Da >> B >> Db;
	for (int i = 0; A[i] != '\0'; i++)
	{
		if (Da == A[i])
		{
			Pa += (Da - '0') * pow(10, count);
			count++;
		}
	}
	count = 0;
	for (int i = 0; B[i] != '\0'; i++)
	{
		if (Db == B[i])
		{
			Pb += (Db - '0') * pow(10, count);
			count++;
		}
	}
	cout << Pa + Pb;
	return 0;
}

 


1021 个位数统计 (15 分)

#include<iostream>
using namespace std;

int main()
{
	char N[1001];
	char D[10] = { '0','1', '2', '3', '4', '5', '6', '7', '8', '9' };
	int	M[10] = { 0 };
	cin >> N;
	for (int i = 0; N[i] != '\0'; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			if (D[j] == N[i])
			{
				M[j]++;
				break;
			}
		}
	}
	for (int i = 0; i < 10; i++)
	{
		if (M[i] != 0)
		cout << D[i] << ":" << M[i] << endl;
	}
	return 0;

}

1026 程序运行时间 (15 分)

#include<iostream>
using namespace std;

int main()
{
	long C1, C2;
	long hours, mintinues,seconds ,sum1;
	double sum2;
	
	cin >> C1 >> C2;
	sum1 = (C2 - C1) / 100;
	sum2 = (C2 - C1) / 100.0;
	if (sum1 + 0.5 <= sum2)
		sum1++;
	hours = sum1 / 3600;
	mintinues = (sum1 - hours * 3600) / 60;
	seconds = sum1 - hours * 3600 - mintinues * 60;
	//second = sum1%60;
	if (hours <= 9)
		cout << '0' << hours << ":";
	else
		cout << hours << ":";
	if (mintinues <= 9)
		cout << '0' << mintinues << ":";
	else
		cout << mintinues << ":";
	if (seconds <= 9)
		cout << '0' << seconds;
	else
		cout << seconds;
	return 0;

}

1031 查验身份证 (15 分)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
	int N=0;
	char idCard[105][20] = {'0'};
	int weight[20] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };
	char M[12] = { '1', '0', 'X', '9', '8' ,'7', '6', '5', '4' ,'3' ,'2' };
	int sum = 0;
	int output[105] = { 0 };
	int flag = 0;
	scanf("%d", &N);
	getchar();
	for (int i = 1; i <= N; i++)
	{
		gets(idCard[i]);
	}
	for (int i = 1; i <= N; i++)
	{
		sum = 0;
		for (int j = 0; j < 17; j++)
		{
			if (idCard[i][j] < '0' || idCard[i][j] > '9')
			{
				output[i] = 0;
				flag = 1;
				break;
			}
			sum += (idCard[i][j] - '0') * weight[j];
		}
		if (flag == 1)
		{
			flag = 0;
			continue;
		}
		//sum %= 11;
		if (M[sum%11] == idCard[i][17])
		{
			output[i] = i;
		}
	}
	for (int i = 1; i <= N; i++)
	{
		if (output[i] == 0)
		{
			puts(idCard[i]);
			flag = 1;
		}
	}
	if (flag == 0)
	{
		printf("All passed");
	}
	return 0;
}

1036 跟奥巴马一起编程 (15 分)

#include<stdio.h>

int main()
{
	int N, count = 1;
	char C;
	scanf("%d %c", &N, &C);
	for (int i = 1; i <= (N % 2 == 0 ? N / 2 : (N + 1) / 2); i++)
	{
		if (count == 1 || count == (N % 2 == 0 ? N / 2 : (N + 1) / 2))
		{
			for (int j = 1; j <= N; j++)
			{
				printf("%c",C);
			}
			printf("\n");
			count++;
		}
		else
		{
			printf("%c", C);
			for (int j = 2; j <= N-1; j++)
			{
				printf(" ");
			}
			printf("%c\n", C);
			count++;
		}
	}
	return 0;
}

1041 考试座位号 (15 分)

#include <stdio.h>
#include <math.h>
#define MAX 1000
struct student
{
	char id[15];
	int a;
	int b;

}stu[MAX];
int main()
{
	int N,M;
	int num[MAX];
	scanf("%d", &N);
	for (int i = 1; i <= N; i++)
	{
		scanf("%s %d %d", &stu[i].id, &stu[i].a, &stu[i].b);
	}
	/***********************安全监测部分***********************/
	for (int i = 1; i < N; i++)
	{
		for (int j = 0; stu[i].id[j] != '\0'; j++)//准考证号由 14 位数字组成,座位从 1 到 N 编号。
		{
			if (!isdigit(stu[i].id[j]))
			{
				return 0;
			}
		}
		if (!strcmp(stu[i].id, stu[i - 1].id))//输入保证每个人的准考证号都不同
		{
			return 0;
		}
		if (stu[i].a == stu[i - 1].a || stu[i].b == stu[i - 1].b)//任何时候都不会把两个人分配到同一个座位上。
		{
			return 0;
		}
	}
	/***********************安全监测部分***********************/
	scanf("%d", &M);
	for (int i = 1; i <= M; i++)
	{
		scanf("%d",&num[i]);
	}
	for (int i = 1; i <= M; i++)
	{
		for (int j = 1; j <= N; j++)
		{
			if (num[i] == stu[j].a)
			{
				printf("%s %d\n", stu[j].id, stu[j].b);
			}
		}
		
	}
	return 0;
}

1046 划拳 (15 分)

#include <stdio.h>
#define  MAX 101
int main()
{
	int N;
	int Speak_a, Do_a, Speak_b, Do_b, Count_a = 0, Count_b = 0;
	scanf("%d", &N);
	for (int i = 0; i < N; i++)
	{
		scanf("%d %d %d %d", &Speak_a, &Do_a, &Speak_b, &Do_b);
		if ((Do_a == Speak_a + Speak_b) && (Do_b != Speak_a + Speak_b))
		{
			Count_b++;
		}
		if ((Do_b == Speak_a + Speak_b) && (Do_a != Speak_a + Speak_b))
		{
			Count_a++;
		}
	}
	printf("%d %d", Count_a, Count_b);
	return 0;
}

1051 复数乘法 (15 分)

#include <stdio.h>
#include <math.h>
#define  MAX 101
int main()
{
	double r1, p1, r2, p2;
	double a, b;
	scanf("%lf%lf%lf%lf", &r1, &p1, &r2, &p2);
	a = r1 * r2*(cos(p1)*cos(p2) - sin(p1)*sin(p2));
	b = r1 * r2*(sin(p2)*cos(p1) + sin(p1)*cos(p2));
	if (a > -0.005&&a < 0)
		printf("0.00");
	else
		printf("%.2lf",a);
	if (b > -0.005&&b < 0)
		printf("+0.00i");
	else if(b<=-0.005)
		printf("%.2lfi",b);
	else
		printf("+%.2lfi",b);
	return 0;
}

1056 组合数的和 (15 分)

#include <stdio.h>
#include <math.h>
#define  MAX 101

int main()
{
	int N = 0;
	int t = 0, count = 0, sum = 0;
	int num[MAX] = { 0 };	//原始数据
	int sort_num[MAX] = { 0 };	//排序后每个数据只出现一次
	scanf("%d", &N);
	for (int i = 0; i < N; i++)
	{
		scanf("%d", &num[i]);
	}
	for (int i = 0; i < N - 1; i++)
		for (int j = i+1; j < N; j++)
		{
			if (num[i] > num[j])
			{
				t = num[i];
				num[i] = num[j];
				num[j] = t;
			}
		}
	/*for(int i=0;i<N;i++)
		printf("%d", num[i]);
	printf("\n");*/
	for (int i = 1; i <= N; i++)
	{
		t = num[i - 1];
		if (num[i] != t)
		{
			sort_num[count] = t;
			count++;
		}
	}
	/*for (int i = 0; i < count; i++)
		printf("%d", sort_num[i]);*/
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < N; j++)
		{
			if(i!=j)
				sum += sort_num[i] * 10 + sort_num[j];
		}
		
	}
	printf("%d", sum);
	return 0;
}

1061 判断题 (15 分)

#include <stdio.h>
#include <math.h>
#define  MAX 101

int main()
{
	int N = 0;
	int M = 0;
	int t = 0;
	int score[MAX] = { 0 };
	int answer[MAX] = { 0 };
	int student[MAX] = { 0 };
	scanf("%d %d", &N, &M);
	for (int i = 0; i < M; i++)
	{
		scanf("%d", &score[i]);
		if (score[i] > 5 || score[i] < 0)
			return 0;
	}
	for (int i = 0; i < M; i++)
	{
		scanf("%d", &answer[i]);
	}
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < M; j++)
		{
			scanf("%d", &t);
			if (t == answer[j])
			{
				student[i] += score[j];
			}
		}
	}
	for (int i = 0; i < N; i++)
	{
		printf("%d\n", student[i]);
	}
	return 0;
}

1066 图像过滤 (15 分)

#include <stdio.h>
#include <math.h>
int main()
{
	int M = 0;
	int N = 0;
	int A = 0, B = 0;
	int t = 0;
	int values = 0;
	scanf("%d%d%d%d%d", &M, &N, &A, &B, &t);
	for (int i = 0; i < M; i++)
	{
		for (int j = 0; j < N; j++)
		{
			scanf("%d", &values);
			if (values >= A && values <= B)
				values = t;
			if (j != 0)
				printf(" ");
			printf("%03d", values);
		}
		printf("\n");
	}
	return 0;
}

1071 小赌怡情 (15 分)

#include<bits/stdc++.h>
using namespace std;
int s,k,i,n1,n2,t,b;
int main()
{
      cin>>s>>k;
  for(i=1;i<=k;i++)
  {
    cin>>n1>>b>>t>>n2;
      if(s==0)
    {
      printf("Game Over.");
      return 0;
    }

      if(s>=t)
    {
      if((n2<n1&&b==0)||(n2>n1&&b==1))
      {
        s+=t;
        printf("Win %d!  Total = %d.\n",t,s);
      }
      else
      {
          s-=t;
        printf("Lose %d.  Total = %d.\n",t,s);
      }
    }
    else if(s<t)
    {
      printf("Not enough tokens.  Total = %d.\n",s);
    }

  }
  return 0;
}

1076 Wifi密码 (15 分)

/*
#include<iostream>
using namespace std;
int main() {
	int n;
	cin >> n;
	string str;
	for (int i = 0; i < n * 4; i++) {
		cin >> str;
		if (str[2] == 'T') cout << (int)str[0] - 'A' + 1;
	}
	return 0;
}*/
#include <stdio.h>
#define MAX 501
#define SIZE 5
int main()
{
	int N = 0;
	char str[MAX][SIZE];
	scanf("%d", &N);
	if (N > 100 || N < 0)
		return 0;
	for (int i = 0; i < 4 * N; i++)
	{
		scanf("%s", str[i]);
		if (str[i][2] == 'T')
		{
			if (str[i][0] == 'A')
				putchar('1');
			else if (str[i][0] == 'B')
				putchar('2');
			else if (str[i][0] == 'C')
				putchar('3');
			else if (str[i][0] == 'D')
				putchar('4');
		}
	}
	return 0;
}

1081 检查密码 (15 分)

#include<stdio.h>
#include<string.h>
int main()
{
	int N=0;
	int i=0,j=0,k=0;
	char str[100];
	int digit=0,letter=0,dot=0,other=0;
	scanf("%d",&N);
	getchar();
	for(i=0;i<N;i++)
	{
		digit=0;letter=0;dot=0;other=0;
		gets(str);
		if(strlen(str)<6)
		{
			printf("Your password is tai duan le.\n");
		}
		else
		{
			for(j=0;str[j]!='\0';j++)
			{
				if(str[j]>='0'&&str[j]<='9')
				{
					digit = 1;
				}
				else if((str[j]>='A'&&str[j]<='Z')||(str[j]>='a'&&str[j]<='z'))
				{
					letter = 1;
				}
				else if(str[j]=='.')
				{
					dot = 1;
				}
				else
				{
					other = 1;
				}
			}
			if(other==1)
			{
				printf("Your password is tai luan le.\n");
			}
			else 
			{
				if(digit==1&&letter==0)
				{
					printf("Your password needs zi mu.\n");
				}
				else if(digit==0&&letter==1)
				{
					printf("Your password needs shu zi.\n");
				}	
				else
					printf("Your password is wan mei.\n");
			}
		}	
	}
	return 0;
}

1086 就不告诉你 (15 分)

#include <stdio.h>
#include <math.h>
#define MAX 8
int main()
{
	int A = 0, B = 0;
	int t = 0;
	int wei[MAX] = { 0 };	//0-6:个 十 百 千 万 十万 百万 
	int result = 0;
	scanf("%d%d",&A, &B);
	if (A > 1000 || B > 1000)
		return 0;
	t = A * B;
	wei[0] = t % 10;
	wei[1] = t / 10 % 10;
	wei[2] = t / 100 % 10;
	wei[3] = t / 1000 % 10;
	wei[4] = t / 10000 % 10;
	wei[5] = t / 100000 % 10;
	if (0 <= t&&t < 10)
		result = wei[0];
	if (10 <= t&&t < 100)
		result = wei[0] * 10 + wei[1];
	if (100 <= t&&t < 1000)
		result = wei[0] * 100 + wei[1] * 10 + wei[2];
	if (1000 <= t&&t < 10000)
		result = wei[0] * 1000 + wei[1] * 100 + wei[2] * 10 + wei[3];
	if (10000 <= t&&t < 100000)
		result = wei[0] * 10000 + wei[1] * 1000 + wei[2] * 100 + wei[3] * 10 + wei[4];
	if (100000 <= t&&t < 1000000)
		result = wei[0] * 100000 + wei[1] * 10000 + wei[2] * 1000 + wei[3] * 100 + wei[4] * 10 + wei[5];
	printf("%d", result);
	return 0;
}

1091 N-自守数 (15 分)

#include<stdio.h>
#include<string.h>

int main()
{
	int M = 0, K = 0, N = 0, t = 0;
	scanf("%d", &M);
	for (int i = 0; i < M; i++)
	{
		scanf("%d", &K);
		for (int j = 1; j < 10; j++)
		{
			t = K * K * j;
			if (0 < K&&K < 10 && t % 10 == K)//个位数
			{
				printf("%d %d\n", j, t);
				break;
			}
			else if (10 <= K&&K < 100 && t % 100 == K)//个位数
			{
				printf("%d %d\n", j, t);
				break;
			}
			else if (100 <= K && K < 1000 && t % 1000 == K)//个位数
			{
				printf("%d %d\n", j, t);
				break;
			}
			if (j == 9)
			{
				printf("No\n");
			}
		}
	}
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值