内容发布更新时间 : 2024/11/18 13:35:28星期一 下面是文章的全部内容请认真阅读。
4火锅火锅和火锅(10分)
题目内容:
众所周知,沫沫以火锅为生。在E8的聚餐活动中,他经常卖萌卖无辜领着大家吃火锅。。
有一天,沫沫听说学校附近的哺呷哺呷在某现充的赞助下有一个优惠活动,只需30软妹币,对每个客人,它会上N道菜,但是客人只能挑选其中连续上的一些菜。 于是他非常兴奋的拉着灰灰和渣渣去吃火锅去啦。
沫沫是一个十分挑食的人,所以他对每一道菜都有一个愉快度(当然因为他的挑食,某些事物的愉快度会是负数)。
为了让沫沫能非常愉快的享受这次聚餐,善解人意的灰灰和渣渣决定帮他计算,他们应该怎么选择菜才能使沫沫最开心地吃完这次聚餐。 输入格式:
第一行是一个整数T,(T <= 10)表示测试案例的个数
对于每个测试案例,第一行是一个整数N,( 1<=N <= 10000)表示菜的个数
接下来的N个数字,第i个数字si表示沫沫对第i道菜的愉快度。( -1000 <=si <= 1000) PS:由于CF又被血虐掉rating,所以沫沫的起始愉快度是0 PPS:沫沫完全可能得到一个为负值的愉快值, poor 沫沫。。 输出格式:
对于每个样例,输出一个数字,表示沫沫吃完之后愉快度的最大值。 HINT: 对于 5 6 -1 5 4 -7
我们选择6, -1, 5, 4这四道菜(注意必须是连续的,所以不能跳过-1) 做完后请思考,如果N的范围是1<=N<=100000呢? 输入样例:
2 5
6 -1 5 4 -7 7
0 6 -1 1 -6 7 -5
输出样例:
14 7
源程序:
#include
int main() {
int x,n,t,s,m,max=-1001; scanf(\ while(t--) {
scanf(\ s=m=0; while(n--) {
scanf(\ if(max0) m=m+x; else m=0; if(s if(max<0) printf(\ else printf(\ } return 0; }
第七周 数组一
1组成最大数(10分)
题目内容:
任意输入一个自然数,输出该自然数的各位数字组成的最大数。 输入格式: 自然数 n 输出格式:
各位数字组成的最大数 输入样例: 1593 输出样例: 9531[回车]
源程序:
#include int main()
{ int a[10]={0},i=0,j,p,n,t;
scanf(\ t=n; while(t) { a[i]=t; t=t/10; } p=i;
for(i=0;i for(j=0;j if(a[j] { t=a[j];a[j]=a[j+1];a[j+1]=t;} i++;
t=0;
for(i=0;i
t=t*10+a[i];
printf(\ return 0; }
2回文数(10分)
题目内容:
输出所有不超过n(取n<256)的、其平方具有对称性质的正整数(也称为回文数)。 如: 1*1=1; 2*2=4;3*3=9;11*11=121;1,2,3,11是回文数。 输入格式:
输入n(n<256) 输出格式:
输出所有不超过n的回文数 输入样例: 3
输出样例: 1[回车] 2[回车]
源程序:
#include int main() {
int n,m,i,f,s; scanf(\
if(n<256 && n>0)
for(i=1;i{ }
m=i*i; f=m; s=0; while(f>0) { s=s*10+f; f=f/10; }
if(m==s) printf(\
else printf(\ }
return 0;
3洗牌(10分)
题目内容:
假设我们有 2n 张牌,它们以 1, 2, ..., n, n+1, ..., 2n 编号并在开始时保持着这种顺序。一次洗牌就是将牌原来的次序变为 n+1, 1, n+2, 2, ..., 2n, n,也就是将原来的前 n 张牌放到位置 2, 4, ..., 2n,并且将余下的 n 张牌按照他们原来的次序放到奇数位置 1, 3, ..., 2n-1。已经证明对于任何一个自然数 n,这 2n 张牌经过一定次数的洗牌就回到原来的次序。但我们不知道对于一个特定的 n,需要几次洗牌才能将牌洗回原来的次序。 输入格式:
牌张数的一半n,即初始情况下一共有2n张牌,n为int型整数 输出格式:
将牌洗回原来的次序所需要的洗牌次数 输入样例: 10 输出样例: 6[回车]
源程序:
#include #define N 80000 int main() {
int a[N]={0},b[N]={0},c[N],i,n,s=0; scanf(\
for(i=0;i<2*n;i++)
{ a[i]=i+1; c[i]=a[i]; } do {
for(i=0;i=0;i--)
a[2*i+1]=a[i];
for(i=0;i // for(i=0;i<2*n;i++) printf(\ // printf(\ s++;
}while(a[n]!=n+1);
printf(\
return 0; }
4子数整除(10分)
题目内容:
对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:
? ? ? ? ? ?
sub1=a1a2a3 sub2=a2a3a4 sub3=a3a4a5
例如,五位数20207可以拆分成: sub1=202 sub2=020(=20) sub3=207
现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1、sub2、sub3都可被K整除。 输出时请按照由小到大的顺序排列(每行输出一个数)。 输入格式: 一个正整数K 输出格式:
请按照由小到大的顺序排列(每行输出一个数) 输入样例: 15 输出样例: 22555[回车] 25555[回车]