/*设数组A中存有n(n>0)个整数,在不允许使用另外数组的前提下,将A中的每个整数循环右移m(m>=0)个位置。即:将A中的数据由(A0A1……An-1)变换为(An-m…… An-1A0A1……An-m-1)。
要求:输入n ( 1<=n<=100)、m(m>=0)及n个整数,输出循环右移m位以后的整数序列。
输入:占二行,其中第1行:n和m两个数,n和m之间用空格分隔。
第2行:数组A中的n个数,各数之间用空格分隔(第一个数之前和最后一个数之后无空格)。
输出:占一行,数据间用一个空格分隔(第一个数之前和最后一个数之后无空格)。
样例:
10 5
1 2 3 4 5 6 7 8 9 0
6 7 8 9 0 1 2 3 4 5*/#include<stdio.h>intmain(){int n, m;int i, j;int k;scanf("%d%d",&n,&m);//n为数的个数,m为右移的个数;int a[200];//.cpp文件可以后定义;for(i =0; i < n; i++){scanf("%d",&a[i]);}for(j =0; j < m; j++)//循环m次,每次将数组中的元素向右平移一个位置{
k = a[n -1];//循环时,先将最后一个数保存,然后将前面的数想后移动一位,即依次从右面移动。for(i = n -1; i >0; i--){
a[i]= a[(i -1+ n)% n];}
a[0]= k;}for(i =0; i < n; i++)//注意输出格式,输出的第一位前面没有空格,最后一位后面也没有空格{if(i == n -1)printf("%d", a[i]);elseprintf("%d ", a[i]);}return0;}
/*编程计算函数ack(m,n)的值。m,n的定义域是非负整数(m<=3,n<=9)。
当m=0时,ack(0,n)=n+1
当n=0时,ack(m,0)=ack(m-1,1)
其它情况下,ack(m,n)=ack(m-1,ack(m,n-1))*/#include<stdio.h>intack(int m,int n){if(m ==0){return n +1;}elseif(n ==0){returnack(m -1,1);}else//if (m > 0 && n > 0){returnack(m -1,ack(m, n -1));}}intmain(){int m,n ;scanf_s("%d%d",&m,&n);//题目中有逗号printf("ack(%d,%d)=%d", m,n,ack(m, n));return0;}
/*求n个数的最大公约数。其中:2<=n<50
输入:n个正整数,用空格隔开。以0作为输入的结束标志。
输出:分两行显示。分别显示最大公约数和这n个数,n个数用1个空格隔开(第一个数前及最后一个数之后无空格)。
注:输入中,输入数的个数不确定,但最多不超过50,不小于2,最后的0是结束标志。输出中,第1行是它们的最大公约数,第2行是输入的n个数,中间用1个空格隔开。*/#include<stdio.h>#include<string.h>intmain(){int sz[100]={0};int i =0;int flag =0;int temp =0;while(i>=0){scanf("%d",&sz[i]);if(sz[i]==0)break;
i = i +1;}int d = i;for(int j = sz[0]; j >0; j--){
flag =0;for(int i =1; i <= d-1; i++){if(sz[i]% j ==0)continue;
flag++;break;}if(flag ==0){
temp = j;break;}}printf("%d\n", temp);for(int i =0; i <= d-2; i++){printf("%d ", sz[i]);}printf("%d", sz[d-1]);return0;}
/*将数字替换为字母。输入一个整数,将它除以2;再将除以2后所得数字的整数部分的各位用相应序号的字母替代。替换原则:0换为a,1换为b,2换为c,...,以此类推,9换为j。
例如,1234,除以2等于617,替换结果为gbh
输入:一个正整数
输出:除2后的整数部分和字符串,中间用一个空格隔开。
样例:1234
617 gbh*/#include<stdio.h>intmain(){int n;scanf("%d",&n);int d = n /2;//方法一:把每一个数取出来都用对应的字母来替换;char sz[20]={0};int i =0;printf("%d ", d);while(d !=0){
sz[i]= d %10;
i++;
d = d /10;}for(int j =0; j <= i -1; j++){switch(sz[j]){case0:sz[j]='a';break;case1:sz[j]='b';break;case2:sz[j]='c';break;case3:sz[j]='d';break;case4:sz[j]='e';break;case5:sz[j]='f';break;case6:sz[j]='g';break;case7:sz[j]='h';break;case8:sz[j]='i';break;case9:sz[j]='j';break;}}for(int k = i -1; k >=0; k--){printf("%c", sz[k]);}return0;}
/*定义最大下标为50的整型数组a和b,编程实现:查找同时在数组a和数组b中的全部元素。
首先输入数组a的元素个数,再输入数组a每个元素的值;接着输入数组b的元素个数,再输入数组b中各元素的值。输出同时在两个数组的全部元素,各元素间用空格隔开(第1个元素前和最后1个元素后无空格)。
样例输入:
3
1 2 3
5
1 3 5 7 9
样例输出:
1 3*/#include<stdio.h>intmain(){int sz1[50];int sz2[50];int a;scanf("%d",&a);for(int i =0; i < a; i++){scanf("%d",&sz1[i]);}int b;scanf("%d",&b);for(int i =0; i <b; i++){scanf("%d",&sz2[i]);}int sz3[50];int sum =0;for(int i=0;i<a;i++)for(int j =0; j < b; j++){if(sz2[j]==sz1[i]){
sz3[sum]= sz2[j];
sum++;break;}}for(int i =0; i < sum-1; i++){printf("%d ", sz3[i]);}printf("%d", sz3[sum-1]);return0;}
/*如果一个数列中某一段(至少有两个元素)的各元素值均相同,则称其为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。
输入: 分两行输入序列长度N和N个整数(其中1<=N<=50), N个整数的每个数之间以空格隔开。
输出: 数组中长度最大的等值数列段的始末下标(0~N-1),用英文逗号分隔。如果没有等值数列段,则输出NO
说明:
如果有多个同等长度的等值数列,只输出第一个等值数列的起止下标。*/#include<stdio.h>intmain(){int a[50], b[50]={1}, len, s =1;//b[50]记录下标与重复scanf("%d",&len);for(int n =0; n < len; n++)scanf("%d",&a[n]);for(int i =0; i < len -1; i++){if(a[i]== a[i +1]){
s++;
b[i +1]= s;}else{
s =1;//重置s
b[i +1]= s;}}int max =1;for(int i =0; i < len; i++){if(max < b[i])max = b[i];//找最大值}for(int i =0; i < len; i++){if(b[i]== max&&max!=1){printf("%d,%d", i - max +1, i);break;//只输出第一段}elseif(max==1){printf("NO");break;}}return0;}
/*一个球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求其到第n次落地(不考虑第n次反弹),共经过了多少米?第n次反弹高度是多少米?
输入:n值。n为整数,取值范围:0<n<=20
输出:分2行输出。第一行为小球到第n次落地经历的路程长度,第二行为小球第n次反弹的高度。长度值和高度值均为实数。*/#include<stdio.h>#include<math.h>intmain(){int n;scanf("%d",&n);double s=100.0, sn;for(int i =0;i < n-1;i++){
s = s +100.0/pow(2, i);}
sn =100.0/pow(2, n);printf("%lf\n%lf", s,sn);return0;}
/*某城市最高的楼有一部电梯,该电梯依照输入楼层数的先后次序运行。电梯最初在0层。运行完一个输入序列后就停止在该楼层,不返回0层。编写程序计算电梯运行一个序列的时间。电梯每上1层需要6秒。每下1层需要4秒。如在某层停留,无论上下人多少,均停留5秒。楼层值大于等于1,小于100 , 0在序列中表示结束序列输入。
输入:电梯运行序列(即:需要停靠的各楼层),用1个空格分隔,以0表示结束;
输出:电梯运行时间(秒)。*/#include<stdio.h>intmain(){int sz[200];int i =0;do{scanf("%d",&sz[i]);
i++;}while(sz[i -1]!=0);int sz1[200];for(int j =0; j < i-1; j++){
sz1[j]= sz[j +1]- sz[j];}/*for (int k = 0; k < i - 2; k++)
{
printf("%d ", sz1[k]);
}*/int sum =5*(i-1)+6*sz[0];//printf("\n%d", sum);for(int k =0; k < i -2; k++){if(sz1[k]>0){
sum = sum +6* sz1[k];}elseif(sz1[k]<0){
sum= sum +(-4)*sz1[k];}}printf("%d", sum);return0;}
/*叛逆期的小明什么都喜欢反着做,连看数字也是如此(负号除外),比如:小明会把1234它看成4321;把-1234看成-4321;把230看成032 (032=32);把-230看成-032(-032=-32)。现在,小明做了一些a+b和a-b的题目(a, b为整数且不含前导0),如果给你这些题目的正确答案,你能猜出小明会得到什么答案吗?
输入:
两个整数x,y(-100000 < = x, y < =100000), x表示a+b的正确答案,y表示a-b的正确答案。输入保证合法,且不需考虑a或b是小数的情况。
输出:
输出两个整数s和t,两数之间用1个空格分开。其中:s表示小明将得到的a+b答案,t表示小明将得到的a-b答案。*/#include<stdio.h>#include<math.h>voidhow(int x,int y);//定义函数how()原型intmain(){int x, y;scanf_s("%d%d",&x,&y);//输入x(a+b),y(a-b)how(x, y);return0;}voidhow(int x,int y){int x1 = x, y1 = y;/*先求出对应a,b值储存在x,y中*/
x =(x1 + y1)/2;
y =(x1 - y1)/2;int a[9];int b[9];int i =0;int j =0;int c =0;int d =0;while(x!=0){
a[i]= x %10;(int) x /=10;
i++;}//将不同位数上的数保存int f = i-1;for( f ; f >=0; f--){
c +=(a[f]*pow(10,(i-1)- f));}//取反while(y !=0){
b[j]= y %10;(int) y /=10;
j++;}int g = j-1;for(g; g >=0; g--){
d +=(b[g]*pow(10,(j-1)- g));}printf("%d %d", c + d, c - d);}