1012 数字分类 (20分)
给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:
- A1 = 能被 5 整除的数字中所有偶数的和;
- A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1−n2+n3−n4⋯;
- A3 = 被 5 除后余 2 的数字的个数;
- A4 = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;
- A5 = 被 5 除后余 4 的数字中最大数字。
输入格式:
每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。
输出格式:
对给定的 N 个正整数,按题目要求计算 A1~A5 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若其中某一类数字不存在,则在相应位置输出 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" << " ";
else
cout << 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" << " ";
else
cout << 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" << " ";
else
cout << 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);
else
cout << "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";
else
cout << 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分)
令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 PM 到 PN 的所有素数。
输入格式:
输入在一行中给出 M 和 N,其间以空格分隔。
输出格式:
输出从 PM 到 PN 的所有素数,每 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;//已经检测到第一个相同的flag
if (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;
}