做完后请思考,如果N的范围是1<=N<=100000呢? 输入样例:
2 5
6 -1 5 4 -7 7
0 6 -1 1 -6 7 -5
输出样例:
14 7
源程序:
#include
int x,n,t,s,m,max=-1001; scanf(\while(t--) {
scanf(\ s=m=0; while(n--) { scanf(\if(max if(max<0) printf(\else printf(\ } return 0; } 第七周数组一 1组成最大数(10分) 题目内容: 任意输入一个自然数,输出该自然数的各位数字组成的最大数。 输入格式: 自然数 n 输出格式: 各位数字组成的最大数 输入样例: 1593 输出样例: 9531[回车] 源程序: #include { 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 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 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 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[回车] 28555[回车] 30000[回车] 源程序: #include int k,m,sub1,sub2,sub3; scanf(\ for(m=10000;m<=30000;m++) { sub1=m/100; sub2=m000/10; sub3=m00; if(sub1%k==0 && sub2%k==0 && sub3%k==0) } return 0; printf(\ } 第八周数组二 1单词排序(10分) 题目内容: 输入 5 个单词,将它们按从大到小的顺序排列后输出。 输入格式: 5个单词 输出格式: 排序后的顺序