1.
&:且
|:或
^:位异或 0异或任何数=任何数 1异或任何数=任何数取反
%:求余
<<:左移
>>:右移
2.
1086: ASCII码排序(多实例测试)
题目描述
输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。
输入
输入数据有多组,每组占一行,由三个字符组成,之间无空格。
输出
对于每组输入数据,输出一行,字符中间用一个空格分开。
#include<stdio.h>
#include <stdlib.h>
#include <math.h>
void CC(char, char, char);
int main()
{
char a, b, c;
while (scanf("%c%c%c", &a, &b, &c) != EOF/*,如果在这里放getchar()相当于由getchar()控制循环了*/)
{
getchar();/*用于吸收多余字符如:回车*/
CC(a, b, c);
}
system ("pause");
return 0;
}
void CC(char x, char y, char z)
{
int s;
if (x < y)
{
s = x;
x = y;
y = s;
}
if (x < z)
{
s = x;
x = z;
z = s;
}
if (y < z)
{
s = y;
y = z;
z = s;
}
printf("%c %c %c\n", z, y, x);
}
3.
1088: 手机短号 (多实例)
题目描述
大家都知道,手机号是一个11位长的数字串,同时,作为学生,还可以申请加入校园网,如果加入成功,你将另外拥有一个短号。假设所有的短号都是是 6+手机号的后5位,比如号码为13512345678的手机,对应的短号就是645678。
现在,如果给你一个11位长的手机号码,你能找出对应的短号吗?
输入
输入数据的第一行是一个N(N <= 200),表示有N组输入数据,接下来的N行每一行为一个11位的手机号码。
输出
输出应包括N行,每行包括一个对应的短号,输出应与输入的顺序一致。
#include<stdio.h>
#include <math.h>
int main()
{
int n, a;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%*6d%5d", &a);
printf("6%05d\n",a);/*没有0 就不会输出0了*/
}
return 0;
}
4.
1089: 阶乘的最高位
题目描述
输入一个正整数n。输出n!的最高位上的数字。
输入
输入一个正整数n(n不超过1000)。
输出
输出n!的最高位上的数字。
#include<stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n, e;
double s = 1.0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
s = s*i;
if (s > 10)
{
while (s >= 10)/*只要最高位所以每过10就抛去一位*/
{
s = s / 10;
}
}
}
e = (int)(s + 0.000001);/*防止截断取整出错*/
printf("%d\n",e);
system ("pause");
return 0;
}
5.
1090: 整数幂(多实例测试)
题目描述
求A^B的最后三位数表示的整数(1<=A,B<=1000)
输入
第一行输入一个整数n,表示有n个测试实例,接着有n行,每行一个实例,给出两个正整数A,B
输出
针对每个测试实例,输出A^B的最后三位(没有前导0) ,单独占一行。
错误示范:
#include<stdio.h>
#include <math.h>
void CC(int);
int main()
{
int n, d, e;
double a;
scanf("%d", &n);
for (int m = 1; m <= n; m++)
{
scanf("%d %d", &d, &e);
a = pow(d*1.0, e);/*不论用多大类型储存都会不可避免溢出 所以错误*/
CC(a);
}
return 0;
}
void CC(int s)
{
int e[3];
for (int i = 0; i < 3; i++)
{
e[i] = s % 10;
s /= 10;
}
printf("%d\n", 100 * e[2] + 10 * e[1] + e[0]);
}
正确答法·:
#include<stdio.h>
#include <stdlib.h>
#include <math.h>
void CC(int,int);
int main()
{
int n, c, d;
scanf("%d", &n);
for (int e = 1; e <= n; e++)
{
scanf("%d %d", &c, &d);
CC(c, d);
}
system("pause");
return 0;
}
void CC(int s, int m)
{
int b = 1;
int r;
for (int i = 1; i <= m; i++)
{
b *= s;
b = b % 1000;/*应为只要后三位将前面多余的丢去 只做后三位计算 以此避免溢出*/
}
printf("%d\n", b);
}
6.
1091: 童年生活二三事(多实例测试)
题目描述
Redraiment小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去。 但年幼的他一次只能走上一阶或者一下子蹦上两阶。 现在一共有N阶台阶,请你计算一下Redraiment从第0阶到第N阶共有几种走法。
输入
输入包括多组数据。 每组数据包括一行:N(1≤N≤40)。 输入以0结束
输出
对应每个输入包括一个输出。 为redraiment到达第n阶不同走法的数量。
错误示范:
#include<stdio.h>
int main()
{
int a, b, c, s = 1, m = 1, n, e;
while (scanf("%d", &n), e = 1, n != 0)
{
if (n % 2 == 0)
e++;
for (a = 1; a <= n; a++)
{
for (b = 1; b * 2 <= n; b++)
{
if (a + 2 * b == n)
{
s = 1, m = 1;
for (int i = 1, c = a + b; i <= a; i++, c--)
{
s *= i;
m *= c;/*不可避免会溢出 最大到n=13*/
}
if (s != 0)
e += (m / s);
}
}
}
printf("%d\n", e);
}
return 0;
}
找到前后两数的规律 n=3的方法数为n=2和n=1的和
正确方法
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int a , b, c, n;
while (scanf("%d", &n), n != 0)
{
a = 1, b = 2, c = 0;/*初始化a,b,c*/
if (n == 1)
printf("1\n");
if (n == 2)
printf("2\n");
if (n >= 3)
{
for (int i = 1; i <= n - 2; i++)
{
c = a + b;
a = b;
b = c;
}
printf("%d\n", c);
}
}
system("pause");
return 0;
}
7.
while(scanf("%d",&n)==1) scanf()的值是正确输入数的个数
是指当n顺利输入后执行while循环。
8.
1092: 素数表(函数专题)
题目描述
输入两个正整数m和n,输出m和n之间的所有素数。
要求程序定义一个prime()函数和一个main()函数,prime()函数判断一个整数n是否是素数,其余功能在main()函数中实现。
int prime(int n)
{
//判断n是否为素数, 若n为素数,本函数返回1,否则返回0
}
对于C/C++代码的提交,本题要求必须通过定义prime函数和main函数实现,否则,提交编译错误,要提交完整的程序。
输入
输入两个正整数m和n,m<=n,且都在int范围内。
输出
输出占一行。输出m和n之间的所有素数,每个数后有一个空格。测试数据保证m到n之间一定有素数。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
#include <math.h>
int prime(int);
int main()
{
int x, y;
scanf("%d %d", &x, &y);
int z;
for (int i = x; i <= y; i++)
{
z = prime(i);
if (z == 1)
printf("%d ", i);
}
system("pause");
return 0;
}
int prime(int n)
{
int a = 0;
if (n == 1)
return 0;
else
{
for (int i = 2; i <= (int)sqrt((double)n); i++)/*如果一个数不是素数 那么他只能为一个小于该数开根后的数乘以大于其开根后的数 我们只取小的就够了*/
{
if (i < n&&n%i == 0)
{
a = 1;
break;
}
}
}
if (a == 0)
return 1;
else
return 0;
}
9.
1093: 验证哥德巴赫猜想(函数专题)
题目描述
哥德巴赫猜想大家都知道一点吧。我们现在不是想证明这个结论,而是对于任给的一个不小于6的偶数,来寻找和等于该偶数的所有素数对。做好了这件实事,就能说明这个猜想是成立的。
要求程序定义一个prime()函数和一个main()函数,prime()函数判断一个整数n是否是素数,其余功能在main()函数中实现。
int prime(int n)
{
//判断n是否为素数, 若n为素数,本函数返回1,否则返回0
}
对于C/C++代码的提交,本题要求必须通过定义prime函数和main函数实现,否则,提交编译错误,要提交完整的程序。
输入
一个偶数M (M是6到1000000之间的一个偶数).
输出
输出和等于该偶数的所有素数对a和b,按a递增的顺序输出,(a,b)和(b,a)被视为同一个素数对。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
#include <math.h>
int prime(int);
int main()
{
int a,z,e;
scanf("%d", &a);
for (int s = 1; s <= a/2/*以防输出相反且相同*/; s++)
{
z = s;
e = a - s;
if (prime(z) == 1 && prime(e) == 1)
printf("%d %d\n", z, e);
}
system("pause");
return 0;
}
int prime(int x)
{
int z = 1;
if (x == 1)
return 0;
else
{
for (int i = 2; i <= (int)sqrt((double)x); i++)/*求素数只用到sqrt(x)*/
{
if (x%i == 0)
{
z = 0;
break;
}
else
z = 1;
}
if (z==0)
return 0;
else
return 1;
}
}