数据结构刷题day2


什么******题目啊

b题目描述不清楚,写了三四个小时,千言万语化为一句话,我真是**了你的**啊。

1003 我要通过!

答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

得到“答案正确”的条件是:

  1. 字符串中必须仅有 PAT这三种字符,不可以包含其它字符;
  2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
  3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 abc 均或者是空字符串,或者是仅由字母 A 组成的字符串。

现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

输入格式:

每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (≤10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。

输出格式:

每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 YES,否则输出 NO

输入样例:

10
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA
APT
APATTAA

输出样例:

YES
YES
YES
YES
NO
NO
NO
NO
NO
NO

题解:

#include
#include
int jug(char arr[])
{
	int a, b, c, i;
	a = b = c = i = 0;
	//数P前A的个数
	while (arr[i] == 'A') {
		a++;
		i++;
	}
	//数到P
	if (arr[i] = 'P')
	{
		i++;
		//数P和T中A的数量
		while (arr[i] == 'A') {
			b++;
			i++;
		}
		//数到T
		if (arr[i] == 'T')
		{
			i++;
			//数T后A的数量
			while (arr[i] == 'A') {
				c++;
				i++;
			}
			if (b!=0&&c == a * b)
			{
				printf("YES\n");
				return;
			}
		}
	}
	printf("NO\n");
}
int main()
{
	int num;
	scanf("%d", &num);
	char arr[10][100];
	for (int i = 0; i < num; i++)
	{
		scanf("%s", arr[i]);
	}
	for (int j = 0; j < num; j++)
	{
		jug(arr[j]);
	}
}

总结:

真差点给我搞破防了。

这个条件,像是从英语直接翻译过来的。

我也不知道骂什么了。

重新总结一下题干:aPbTc这个字符串中,b=a*c,只能为'A'。

具体也没啥技术含量,用了字符数组的传参。

1004 成绩排名

读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

输入格式:

每个测试输入包含 1 个测试用例,格式为

第 1 行:正整数 n
第 2 行:第 1 个学生的姓名 学号 成绩
第 3 行:第 2 个学生的姓名 学号 成绩
  ... ... ...
第 n+1 行:第 n 个学生的姓名 学号 成绩

其中姓名学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。

输出格式:

对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。

输入样例:

3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95

输出样例:

Mike CS991301
Joe Math990112

题解:

#include
int main()
{
	int sum;
	scanf("%d", &sum);
	char arr1[100][11];
	char arr2[100][11];
	int arr3[100];
	int max = 0;
	int min = 100;
	int max_flag;
	int min_flag;
	for (int i = 0; i max)
		{
			max = arr3[i];
			max_flag = i;
		}
		if (arr3[i] < min)
		{
			min = arr3[i];
			min_flag = i;
		}
	}
	//完成数据读入
	//arr3中存放的是成绩,寻找最大和最小
	
	printf("%s %s\n", arr1[max_flag],arr2[max_flag]);
	printf("%s %s\n", arr1[min_flag],arr2[min_flag]);
}

总结:

  1. scanf数字的时候,要加&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  2. 一开始报了半天越界,把代码重构了几遍没反应,最后把数组调大了点,过了,麻