输入样例:
5
bob 11 101 102 103 104 105 106 107 108 108 107 107
peter 8 1 2 3 4 3 2 5 1
chris 12 1 2 3 4 5 6 7 8 9 1 2 3
john 10 8 7 6 5 4 3 2 1 7 5
jack 9 6 7 8 9 10 11 12 13 14
输出样例:
jack chris john
#include
#include
#include
#include
using namespace std;
struct person {
char name[10];
int num;
int sum;
};
bool comparison(person a, person b)
{
if (a.sum != b.sum)
return a.sum > b.sum;
else
return a.num < b.num;
}
int main()
{
struct person a[100];
int i, k, N,b;
int len = 0;
cin >> N;
for (i = 0; i < N; i++)
{
set<int> str;
cin >> a[i].name >> len;
a[i].num = len;
for (k = 0; k < len; k++)
{
cin >> b;
str.insert(b);
}
a[i].sum = str.size();
}
sort(a, a + N, comparison);
if (N < 3)
{
if (N == 0)
cout << "- - -";
else if (N == 1)
cout << a[0].name << " - -";
else if (N == 2)
cout << a[0].name << a[1].name << " -";
}
else {
for (int i = 0; i < 3; i++) {
if (!i)
cout<<a[i].name;
else
cout<<" "<<a[i].name;
}
cout<<endl;
}
return 0;
}
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1
)。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1因子2*……因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
输入样例:
630
输出样例:
3
5 * 6 * 7
#include
#include
#include
using namespace std;
int IsPrime(long long int number)
{
int i;
if (number == 1)
return 0;
else
{
for (i = 2; i <= sqrt(number); i++)
{
if (number%i == 0)
return 0;
}
return 1;
}
}
int main()
{
int i=0, j=0,length=0,s=1,start=0,count=0;
int flag = 0;
long long int number;
cin >> number;
if (IsPrime(number))
{
cout << "1"<<endl;
cout<<number;
}
else
{
for (i = 2; i <= sqrt(number); i++)
{
s = 1;
for (j = i; j*s <= number; j++)
{
s *= j;
count = j;
if (number%s == 0 && count - i + 1 > length)
{
start = i;
length = count - i + 1;
}
}
}
cout << length<<endl;
for (i = start; i < start + length; i++)
{
cout << i;
if (flag<length-1)
cout << "*";
flag++;
}
}
return 0;
}
一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。
输入格式:
输入在第一行给出一个正整数N(≤10
4
)。随后 N 行,每行给出一个玩家的名字(由不超过8个英文字母组成的字符串)和其猜的正整数(≤ 100)。
输出格式:
在一行中顺序输出:大家平均数的一半(只输出整数部分)、赢家的名字,其间以空格分隔。题目保证赢家是唯一的。
输入样例:
7
Bob 35
Amy 28
James 98
Alice 11
Jack 45
Smith 33
Chris 62
输出样例:
22 Amy
#include
#include
#include
#include
using namespace std;
struct person {
string name;
int num;
int cha;
};
int main()
{
struct person a[10000];
int N;
int b[10000];
cin >> N;
int i=0,j,sum = 0;
double aver=0;
for (i = 0; i < N; i++)
{
cin >> a[i].name >> a[i].num;
sum += a[i].num;
aver += (a[i].num*1.0) / (N * 2);
}
cout << (int)aver << " ";
set<int>s;
for (i = 0; i < N; i++)
{
a[i].cha = abs(a[i].num - (int)aver);
s.insert(a[i].cha);
}
for (j = 0; j < N; j++)
if (a[j].cha == *(s.begin()))
cout << a[j].name;
return 0;
}
笔记
s.end()表示s的最后⼀个元素的下⼀个元素所在的位置
s.erase(1); // 删除集合s中的1这个元素