设数组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
样例输入:
1 1 1
样例输出:
1
//时间来不及了,看答案后自己把答案写出来
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n, m;//n 个数,移动m次
scanf("%d %d", &n, &m);
//读入数组
int a[100];
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
//循环移动
for (int i = 0; i < m; i++)
{
int x = a[n - 1];
for (int j = n - 2; j >= 0; j--)
{
a[j + 1] = a[j];
}
a[0] = x;
}
//输出数组
for (int i = 0; i < n; i++)
{
i == 0 ? printf("%d", a[i]) : printf(" %d", a[i]);
}
return 0;
}
编程计算函数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))
样例输入:
3 6
样例输出:
ack(3,6)=509
//函数的递归调用
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int ack(int m, int n);
int main()
{
int m, n;
scanf("%d%d", &m, &n);
int s = ack(m, n);
printf("ack(%d,%d)=%d",m,n, s );
return 0;
}
int ack(int m, int n)
{
int c = 0;
if (m == 0) { c = n+1; }
else if (n == 0) { c = ack(m - 1, 1); }
else
{
c = ack(m - 1, ack(m, n - 1));
}
return c;
}
/*
* 崔神的代码还是如此清新脱俗
int Ack(int m, int n);
int main()
{
int m, n;
(void)scanf("%d%d", &m, &n);
printf("ack(%d,%d)=%d\r\n", m, n, Ack(m, n));
return 1;
}
int Ack(int m, int n)
{
if (m == 0)
{
return n + 1;
}
if (n == 0)
{
return Ack(m - 1, 1);
}
return Ack(m - 1, Ack(m, n - 1));
}
*/
求n个数的最大公约数。其中:2<=n<50
输入:n个正整数,用空格隔开。以0作为输入的结束标志。
输出:分两行显示。分别显示最大公约数和这n个数,n个数用1个空格隔开(第一个数前及最后一个数之后无空格)。
注:输入中,输入数的个数不确定,但最多不超过50,不小于2,最后的0是结束标志。输出中,第1行是它们的最大公约数,第2行是输入的n个数,中间用1个空格隔开。
样例输入:
4928 4160 6144 0
样例输出:
64 4928 4160 6144
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a[50] = { 0 };
//输入这n个数并记下其个数
int n = 0;
scanf("%d", &a[0]);
while (a[n] != 0) { n++; scanf("%d", &a[n]); }
//求最大公约数
int gcd = a[0];
int flag = 1;
while (flag)
{
flag = 0;
for (int i = 0; i < n; i++)
{
if (a[i] % gcd)
{
flag = 1;
break;
}
}
if (flag)//flag!=0时,说明gcd不是最大公约数,只能更小
{
gcd--;
}
}
printf("%d\n", gcd);
//输出数组
for (int i = 0; i < n; i++)
{
i == 0 ? printf("%d", a[0]) : printf(" %d", a[i]);
}
return 0;
}
编写程序,计算下列多项式的值:
poly(n,x)=1, 当 n=0;
poly(n,x)=x, 当 n=1;
poly(n,x)=((2*n-1)*x* poly(n-1,x)-(n-1)* poly(n-2,x))/n, 当 n>1;
输入:n和x,格式:"%d%lf"。(n<20)
输出:第n个多项式在x处的值,格式:"%lf\n"。
样例输入:
0 12.5
样例输出:
1.000000
//额滴神,保佑我考试抽到这样的题
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
double poly(int n, double x);
int main()
{
int n;
double x;
scanf(" %d%lf", &n, &x);
printf("%lf\n", poly(n, x));
return 0;
}
double poly(int n, double x)
{
if (n == 0) { return 1; }
else if (n == 1) { return x;}
else { return ((2 * n - 1) * x * poly(n - 1, x) - (n - 1) * poly(n - 2, x)) / n; }
}
将数字替换为字母。输入一个整数,将它除以2;再将除以2后所得数字的整数部分的各位用相应序号的字母替代。替换原则:0换为a,1换为b,2换为c,...,以此类推,9换为j。
例如,1234,除以2等于617,替换结果为gbh
输入:一个正整数
输出:除2后的整数部分和字符串,中间用一个空格隔开。
样例:1234
617 gbh
样例输入:
2
样例输出:
1 b
//这几题都挺简单
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
int a = n / 2;
printf("%d ", a);
int b = (int)log10(a) + 1;
int c = a,i=b-1;
char str[200] = {0};
while (c)
{
str[i] = 'a' + c % 10;
c /= 10;
i--;
}
printf("%s", str);
return 0;
}
定义最大下标为50的整型数组a和b,编程实现:查找同时在数组a和数组b中的全部元素。
首先输入数组a的元素个数,再输入数组a每个元素的值;接着输入数组b的元素个数,再输入数组b中各元素的值。输出同时在两个数组的全部元素,各元素间用空格隔开(第1个元素前和最后1个元素后无空格)。
样例输入:
4 1 2 3 1 5 1 3 5 7 9
样例输出:
1 3
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int na;
scanf("%d", &na);
int a[50];
for (int i = 0; i < na; i++)
{
scanf("%d", &a[i]);
}
int nb;
scanf("%d", &nb);
int b[50];
for (int i = 0; i < nb; i++)
{
scanf("%d", &b[i]);
}
//查找共同元素,同时有些元素之前已经出现过,要排除掉
//先找出共同元素
int cut = 0;
int c[200];
for(int i=0;i<na;i++)
for (int j = 0; j < nb; j++)
{
if (b[j] == a[i])
{
c[cut] = a[i]; cut++;
}
//输出即可,重复的就不输出了,下面做不到这个功能,以后再改吧
printf("%d", c[0]);
for (int i = 1; i < cut; i++)
{
int n = 0;
for (int m = 0; m < i; m++)
{
if (c[m] != c[i])
{
n++;
}
}
if (n == i) { printf(" %d", c[i]); }
}
return 0;
}
如果一个数列中某一段(至少有两个元素)的各元素值均相同,则称其为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。
输入: 分两行输入序列长度N和N个整数(其中1<=N<=50), N个整数的每个数之间以空格隔开。
输出: 数组中长度最大的等值数列段的始末下标(0~N-1),用英文逗号分隔。如果没有等值数列段,则输出NO
说明:
如果有多个同等长度的等值数列,只输出第一个等值数列的起止下标。
样例输入:
7 3 1 2 1 1 2 2
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n;
int a[100];
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
//找等值数段
int start=0;
int end=0;
int lenth = 0;
int cstart, cend, clenth = 0;
int i=0;
while (i < n)
{
cstart = i;
cend = i + 1;
while (a[cstart] == a[cend] && cend < n)
{
cend++;
}
if (cend - cstart > 1)
{
clenth = cend - cstart;
if (clenth > lenth)
{
end = cend-1;
start = cstart;
lenth = cend - cstart;
}
}
i = cend;
}
lenth == 0 ? printf("NO") : printf("%d,%d", start, end);
return 0;
}
一个球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求其到第n次落地(不考虑第n次反弹),共经过了多少米?第n次反弹高度是多少米?
输入:n值。n为整数,取值范围:0<n<=20
输出:分2行输出。第一行为小球到第n次落地经历的路程长度,第二行为小球第n次反弹的高度。长度值和高度值均为实数。
样例输入:
1
样例输出:
100.000000 50.000000
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
double s=0, x=100;
for (int i = 1; i <= n; i++)
{
x = 0.5 * x;
if (i == 1)
{
s = 100;
}
else { s = s + 4.0 * x; }
}
printf("%lf\n%lf", s, x);
return 0;
}
某城市最高的楼有一部电梯,该电梯依照输入楼层数的先后次序运行。电梯最初在0层。运行完一个输入序列后就停止在该楼层,不返回0层。编写程序计算电梯运行一个序列的时间。电梯每上1层需要6秒。每下1层需要4秒。如在某层停留,无论上下人多少,均停留5秒。楼层值大于等于1,小于100 , 0在序列中表示结束序列输入。
输入:电梯运行序列(即:需要停靠的各楼层),用1个空格分隔,以0表示结束;
输出:电梯运行时间(秒)。
样例输入:
2 1 0
样例输出:
26
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//依旧是个有问题的代码,以后再来修改了
/*
int main()
{
int a[100] = {0};
int i;
for (i = 0;; i++)
{
scanf("%d", &a[i]);
if (a[i] == 0) { break; }
}
int t=0;
for (int m = 0; m < i ; m++)
{
if (m == 0) { t = 6 * a[0]; }
if (a[m] > a[m + 1] && m + 1 <= i )
{
t = t + 4 * (a[m] - a[m+1]);
}
if (a[m] < a[m + 1]&& m+1<=i)
{
t = t + 6 * (a[m + 1] - a[m]);
}
}
t =t+ 5 * i;
printf("%d", t);
return 0;
}*/
//正确代码如下
int main()
{
int floor = 0, t=0;
int nextfloor;
scanf("&d", &nextfloor);
while (nextfloor)
{
int a = nextfloor - floor;
t = t + 5 + (a > 0 ? 6 * a : -4 * a);
floor = nextfloor;
scanf("%d", &nextfloor);
}
printf("%d", t);
return 0;
}
叛逆期的小明什么都喜欢反着做,连看数字也是如此(负号除外),比如:小明会把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答案。
样例输入:
20 6
样例输出:
38 24
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int fz(int x);
int main()
{
int x, y;
scanf("%d%d", &x, &y);
int a = (x + y) / 2;
int b = (x - y) / 2;
printf("%d %d", fz(a) + fz(b), fz(a) - fz(b));
return 0;
}
int fz(int n)
{
if (n < 0)
{
n = -n;
int m = n, s = 0, i;
i = log10(n) + 1;
while (m)
{
s += (m % 10) * (int)pow(10, i - 1);
i--;
m = m / 10;
}
return -s;
}
int m = n, s = 0, i;
i = log10(n) + 1;
while (m)
{
s += (m % 10) * (int)pow(10, i - 1);
i--;
m = m / 10;
}
return s;
}