Day 4

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;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值