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

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
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
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
#include
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
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
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
#include
#include
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

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 
#include 
#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 
#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 
#include 
#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 
#include 
#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

1061 判断题 (15 分)

#include 
#include 
#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 
#include 
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
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((n2n1&&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

1076 Wifi密码 (15 分)

/*
#include
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 
#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
#include
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='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 
#include 
#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
#include

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

 

你可能感兴趣的:(C/C++)