当前位置: 代码迷 >> 综合 >> PAT乙级 1012 数字分类 (20分) 1013 数素数 (20分) 1014 福尔摩斯的约会 (20分) 1014 福尔摩斯的约会 (20分)
  详细解决方案

PAT乙级 1012 数字分类 (20分) 1013 数素数 (20分) 1014 福尔摩斯的约会 (20分) 1014 福尔摩斯的约会 (20分)

热度:54   发布时间:2023-12-17 14:16:12.0

1012 数字分类 (20分)

给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:

  • A?1?? = 能被 5 整除的数字中所有偶数的和;
  • A?2?? = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n?1???n?2??+n?3???n?4???;
  • A?3?? = 被 5 除后余 2 的数字的个数;
  • A?4?? = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;
  • A?5?? = 被 5 除后余 4 的数字中最大数字。

输入格式:

每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。

输出格式:

对给定的 N 个正整数,按题目要求计算 A?1??~A?5?? 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。

若其中某一类数字不存在,则在相应位置输出 N

不难但是没看到数字不存在的情况所以重新改了一遍,审题!

#include<iostream>
#include<vector>
#include<string>
#include <iomanip>
using namespace std;int A1(vector<int> v)
{int temp = 0,flag=0;for (int i = 0; i < v.size(); i++){if (v[i] % 5 == 0 && v[i] % 2 == 0){temp += v[i];flag++;}}if (flag == 0)cout << "N" << " ";elsecout << temp << " ";return 0;
}int A2(vector<int> v)
{int temp = 0, ch = 1,flag=0;for (int i = 0; i < v.size(); i++){if (v[i] % 5 == 1){if (ch % 2 == 1){temp += v[i];ch++; flag++;}else{temp -= v[i];ch++; flag++;}}}if (flag == 0)cout << "N" << " ";elsecout << temp << " ";return 0;
}int A3(vector<int> v)
{int temp = 0,flag=0;for (int i = 0; i < v.size(); i++){if (v[i] % 5 == 2){temp++;flag++;}}if (flag == 0)cout << "N" << " ";elsecout << temp << " ";return 0;
}float A4(vector<int> v)
{float temp = 0;float ch = 0;int flag = 0;for (int i = 0; i < v.size(); i++){if (v[i] % 5 == 3){temp += v[i];ch++;flag++;}}if (flag != 0)printf("%.1f ", temp / ch);elsecout << "N" << " ";return 0;
}float A5(vector<int> v)
{float temp = 0,flag=0;for (int i = 0; i < v.size(); i++){if (v[i] % 5 == 4)if (v[i] > temp){temp = v[i];flag++;}}if (flag == 0)cout << "N";elsecout << temp;return 0;
}int main()
{int sum = 0;cin >> sum;vector<int> v;for (int i = 0; i < sum; i++){int temp = 0;cin >> temp;v.push_back(temp);}A1(v);A2(v);A3(v);A4(v);A5(v);return 0;
}

1013 数素数 (20分)

令 P?i?? 表示第 i 个素数。现任给两个正整数 M≤N≤10?4??,请输出 P?M?? 到 P?N?? 的所有素数。

输入格式:

输入在一行中给出 M 和 N,其间以空格分隔。

输出格式:

输出从 P?M?? 到 P?N?? 的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。

有一个测试用例没过,不知道有什么问题,要是有大佬看到了望指教

#include<iostream>
#include<vector>
#include<string>
#include<math.h>
using namespace std;
bool sushu(int n)//判断素数
{if (n == 1)return true;if (n == 2)return true;for (int i = 2; i < sqrt(n) + 1; i++){if (n % i == 0)return false;}return true;
}
int main()
{int a = 0, b = 0,temp=0,temp1=1;//temp1表示是输出的第几个数字,用于输出的格式管理cin >> a >> b;vector<int> v;for (int i = 1; i < 100000; i++)//先找到b+1个素数,存入vector{if (sushu(i)){if (temp != b + 1){temp++;v.push_back(i);}}}for (int i = a; i <= b; i++)//输出从a到b的数据{if (temp1 % 10==0){cout << v[i];temp1++;cout << "\n";}else if (i == b){cout << v[i];break;}else{cout << v[i] << " ";temp1++;}}return 0;
}

1014 福尔摩斯的约会 (20分)

大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2 对相同的字符是 E ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、以及大写字母 A 到 N 表示);后面两字符串第 1 对相同的英文字母 s 出现在第 4 个位置(从 0 开始计数)上,代表第 4 分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。

输入格式:

输入在 4 行中分别给出 4 个非空、不包含空格、且长度不超过 60 的字符串。

输出格式:

在一行中输出约会的时间,格式为 DAY HH:MM,其中 DAY 是某星期的 3 字符缩写,即 MON 表示星期一,TUE 表示星期二,WED 表示星期三,THU 表示星期四,FRI 表示星期五,SAT 表示星期六,SUN 表示星期日。题目输入保证每个测试存在唯一解。

第一个相同需要定位在A~G中,否则例子4错误,

第二个相同需要定位在a~n中,否则就要3例子错误,

第二个例子还是没有搞明白为什么错

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{string a, b, c, d;int flag = 0,hh=0,mm=0;cin >> a >> b >> c >> d;for (int i = 0; i < 60; i++){if (a[i] == b[i] && flag == 1 && ((a[i]>='0' && a[i]<='9')||((a[i] >= 'A' && a[i] <= 'N') || (a[i] >= 'a' && a[i] <= 'n'))))//第二个相同{if (a[i] <= '9')hh = a[i] - '0';if (a[i] >= 'A')hh = a[i] - 'A' + 10;break;}if (a[i] == b[i] && (a[i] >= 'A' && a[i]<='G') && flag==0)//第一个相同{flag = 1;//已经检测到第一个相同的flagif (a[i] == 'A')cout << "MON ";if (a[i] == 'B')cout << "TUE ";if (a[i] == 'C')cout << "WED ";if (a[i] == 'D')cout << "THU ";if (a[i] == 'E')cout << "FRI ";if (a[i] == 'F')cout << "SAT ";if (a[i] == 'G')cout << "SUN ";}}for(int i = 0; i < 60; i++)//输出分钟{if (c[i] == d[i] && ((c[i] >= 'A' && c[i]<='Z')||(c[i]>='a'&&c[i]<='z'))){mm = i;break;}}printf("%02d:%02d",hh, mm);return 0;
}