青海大学mooc测验和作业 下载本文

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[回车]