一、输出字符;
描述
输出指定数量的指定字符。
输入
多组案例。一个正整数n,表示案例的数量。
每组案例由一个正整数m和一个字符a组成。
输出
针对每组案例,如果m是奇数,则输出m个a,中间不要有空格;如果m是偶数,则输出m/2个a,每两个a之间都要有一个空格,最后一个a后面没有空格。
每组案例输出完都要换行。
样例输入
2
5 B
6 N
样例输出
BBBBB
N N N
关键代码
if (m % 2 == 1)
{
*********
{
cout << a;
}
}
else
{
for (int i = 1; i <= m - 1; i++)
{
if (********)
cout << a;
else
cout << " ";
}
}
注意事项
奇数和偶数分别输出的是什么,偶数最后一个字符输出后没有空格。
二、二次函数最值问题;
描述
已知一个二次函数f(x)=ax2+bx+c,求该函数的最值。
输入
多组案例,一个正整数n,表示案例的数量。
每组案例由3个整数a、b、c组成,其中a不等于0,保证b是2a的整数倍,保证最值是一个整数。
输出
针对每组案例,如果该函数有最大值,则输出max=最大值;如果该函数有最小值,则输出min=最小值。
每组案例输出完都要换行。
样例输入
2
1 2 3
-1 2 3
样例输出
min=2
max=4
关键代码
ans = (4 * a * c - b*b) / (4 * a);
if (a > 0)
cout << "min=" << ans<<endl;
else
cout << "max=" << ans<<endl;
注意事项
括号不能少!!!(4*a*c-b*b)/(4*a)与(4*a*c-b*b)/4*a的计算结果是不一样的;还有二次函数的开口问题。
三、静默的质数;
描述
班上有m个同学玩报数游戏。1号同学想了一个正整数a,并且保证a不是质数,然后大声地喊出来,报给了2号同学;2号同学把a加1,这个数字如果不是质数,则该同学会大声地喊出来,报给3号同学,如果这个数字是质数,则2号同学会通过传纸条的方式静默地把这个数字报给3号同学;...;以此类推,每个同学都要把上一个同学传递来的数字加1,并且根据该数字是质数与否,决定是喊出来还是静默传递,包括最后一名同学(虽然他不需要再往下传递了)。这样当所有m个同学完成游戏后,到底有多少名同学选择了静默的方式。
输入
多组案例。一个正整数n,表示案例的数量。(n<=20)
每组案例由2个正整数m和a,分别表示同学的数量和1号同学想的数字。(m<=100, 2<=a<=10000)
输出
针对每组案例,输出一个正整数,表示有多少个同学的数字是质数。
每组案例输出完都要换行。
样例输入
2
6 12
2 15
样例输出
2
0
关键代码
bool isPrime(int a)
{
if (a < 2)
{
return false;
}
for (int i = 2; i <= sqrt(a); i++)
{
if (a % i == 0)
{
return false;
}
}
return true;
}
*
*
*
*
*
*
*
*
for (int i = a; i < a + m; i++)
{
if (isPrime(i))
cnt += 1;
}
注意事项
判断素数的函数要写对,如果多组数据cnt要重置。
四、总和为4;
描述
输入一些正整数,判断其中是否有若干个数字的总和为4(要求至少2个数字的和)
输入
多组案例。一个正整数n,表示案例的数量。(n<=20)
每组案例首先是一个正整数m,表示数字的个数;然后是m个正整数。(m<=2500000)
输出
针对每组案例,如果这m个正整数中有2个或者2个以上数字的总和为4,则输出Yes,否则输出No。
每组案例输出完都要换行。
样例输入
3
4
1 2 5 2
3
4 4 4
5
2 3 5 6 8
样例输出
Yes
No
No
关键代码
int a[4] = {0};
for (***************)
{
int x;
cin >> x;
if (x < 4)
{
a[x]++;
}
}
if ((a[1] >= 1 && a[3] >= 1) || (a[2] >= 2) || (a[1] >= 2 && a[2] >= 1) || (a[1] >= 4))
cout << "Yes\n";
else
cout << "No\n";
注意事项
加起来等于四只有1+3;2+2;1+1+2;1+1+1+1这四种。所以用数组计算输入的数中有多少1、2、3就能判断能否加起来等于4.
五、舍罕王-2;
描述
这是印度的一个古老传说,舍罕王打算重赏象棋发明人、宰相西萨·班·达依尔。这位聪明的大臣的胃口看来并不大,他跪在国王面前说:“陛下,请您在这张棋盘的第一个小格内,赏给我一粒麦子,在第二个小格内给两粒,第三格内给四粒,用这样下去,每一小格内都比前一小格加一倍。陛下,把这样摆满棋盘上所有64格的麦粒,都赏给您的仆人吧!”
国王有m粒麦粒,然后在第一格内放1粒,第二格内放2粒,第三格内放4粒,…
当然国王的麦粒根本铺不满所有的格子,在某个格子上,最终停了下来。
问最后一个有麦粒的格子上有多少颗麦粒?
输入
多组案例。一个正整数n,表示案例的数量。(n<=20)
每组案例由一个无符号长整数(unsigned long long)m组成,表示麦粒的总数。(m取值在无符号长整型范围内)
输出
针对每组案例,输出一个无符号长整数,表示最后一个有麦粒的格子上麦粒的数量。
每组案例输出完都要换行。
样例输入
3
15
9
8446743973709
样例输出
8
2
4048697462606
关键代码
for (unsigned long long int i = 1; i < m; i *= 2)
{
m = m - i;
}
注意事项
第一格放一个 第二格放两个 第三格放4个……第64格放2^(64-1)个
六、天文大潮;
描述
2021年10月8日厦门天文大潮,已知下一次天文大潮在a天以后,输出下一次天文大潮发生的时间。
闰年年份包括两种情况:4的倍数且非100的倍数;或者400的倍数且非3200的倍数。
输入
多组案例。一个正整数n,表示案例的数量。(n<=100)
每组案例由一个正整数a组成。(a<=10亿)。
输出
针对每组案例,输出3个整数,表示下一次天文大潮发生的年月日,每两个整数之间留一个空格。
每组案例输出完都要换行。
样例输入
2
1
1000000000
样例输出
2021 10 9
2739931 2 14
关键代码
bool leapYear(int m)
{
if ((m % 4 == 0 && m % 100 != 0) || (m % 400 == 0) && (m % 3200 != 0))
return true;
return false;
}
*
*
*
*
*
if (afterday >= 365)
{
while (afterday > 0)
{
if (leapYear(year + 1))
{
afterday -= 366;
if (afterday < 0)
{
afterday += 366;
break;
}
year += 1;
}
else
{
afterday -= 365;
if (afterday < 0)
{
afterday += 365;
break;
}
year += 1;
}
}
}
while (afterday > 0)
{
afterday--;
day += 1;
if (day > DAY[month])
{
month += 1;
day = 1;
if (month > 12)
{
month = 1;
year += 1;
if (leapYear(year))
{
DAY[2] = 29;
}
else
DAY[2] = 28;
}
}
}
注意事项
首先是闰年判断的函数要对,其次如果还剩365天,下一年刚好是闰年,那么365-366=-1,所以要加回来,进入下面的循环。我不足365天后就开始一天一天加其实可以一月一月加再一天一天加,代码更优化 记得判断完是否闰年后2月的天数要改变
*根据自己遇到的问题和错误写的
如果还有问题的话请大家多斧正