题目来源:ZZULIOJ
目录
1060 逆序数字1
#include <stdio.h>
#include <math.h>
int main(void)
{
int n;
scanf("%d",&n);
while(n>0)
{
printf("%d ",n%10);
n = n/10;
}
return 0;
}
1061 顺序输出各位数字
#include <stdio.h>
#include <math.h>
int main(void)
{
int n,h=1,a;
scanf("%d",&n);
a = n;
while(a>=10)
{
a = a/10;
h *= 10;
}
//printf("%d\n",h);
while(h>0)
{
printf("%d ",n/h);
n = n%h;
h = h/10;
}
return 0;
}
1062 最大公约数
欧几里得算法(辗转相除法):用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
#include <stdio.h>
#include <math.h>
int main(void)
{
int m,n,a;
scanf("%d %d",&m,&n);
while(a = m%n)
{
m = n;
n = a;
}
printf("%d\n",n);
return 0;
}
1063 最大公约与最小公倍
#include <stdio.h>
#include <math.h>
int main(void)
{
int m,n,a,x,y,b;
scanf("%d %d",&m,&n);
x = m;
y = n;
while(a = m%n)
{
m = n;
n = a;
}
b = (x/n)*(y/n)*n;
printf("%d %d\n",n,b);
return 0;
}
1064 加密字符
#include<stdio.h>
int main(void)
{
char ch;
while(ch = getchar(),ch!='@')
{
if(ch>='A' && ch<='Z')
{
ch += 32;
}
if (ch>='a' && ch <='y')
{
ch += 1;
printf("%c",ch);
}else if(ch == 'z')
{
ch = 'a';
printf("%c",ch);
}else
printf("%c",ch);
}
return 0;
}
1065 统计数字字符的个数
#include<stdio.h>
int main(void)
{
char ch;
int a = 0;
while(ch = getchar(),ch!='\n')
{
if(ch>='0' && ch<='9')
{
a++;
}
}
printf("%d\n",a);
return 0;
}
1066 字符分类统计
#include<stdio.h>
int main(void)
{
char ch;
int i=1,a,b,c;
a = b = c =0;
while(scanf("%c",&ch),ch!='\n' && i<=100)
{
if(ch>='0' && ch<='9')
{
b++;
}else if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
a++;
}else
{
c++;
}
i++;
}
printf("letter:%d\n",a);
printf("digit:%d\n",b);
printf("other:%d\n",c);
return 0;
}
1067 有问题的里程表
【提示】
方法1:这对本题数据规模较小的情况,可用一个循环来模拟。用一个1~num的循环,在循环过程中,用另一个循环变量计数,统计不含数字4的整数个数。
方法2:此题稍加修改,可转换为一个9进制转换为10进制的问题,此方法更通用。
#include <stdio.h>
#include <math.h>
int main(void) {
int a = 0, i, n;
scanf("%d", &n);
for(i=1;i<=n;i++) {
if(i%10 == 4) continue;
if((i/10)%10 == 4) continue;
if((i/100)%10 == 4) continue;
a++;
}
printf("%d", a);
return 0;
}
1068 二进制数
#include <stdio.h>
#include <math.h>
int main(void) {
char ch;
int n = 0;
while (ch = getchar(), ch!='\n')
{
//参考秦九韶算法
// ch -'0'是字符串转数字
n = n*2 + (ch-'0');
}
printf("%d\n", n);
return 0;
}
1069 向z同学学习
#include<stdio.h>
int main(void)
{
int m,k,sum,i;
i = 0;
k = 0;
scanf("%d %d",&m,&k);
sum = m;
while(sum>0)
{
sum -= 1;
i += 1;
if(i%k==0)
sum += 1;
}
printf("%d\n",i);
return 0;
}
1070 小汽车的位置
题目描述
有一辆智能小车,最初(时间为0)的位置为(0,0),我们想知道它最后的位置。小车以每小时10公里的速度向北移动(以北为y轴正向,以东为x轴正向)。小车会受到一系列依照时间戳记排序的命令,1表示“向左转”,2表示“向右转”,3表“停止”。每个命令的前面有一个时间戳记,所以我们知道该命令是何时发出的。最后一个命令一定是“停止”。我们另外假设,这辆小车非常灵活,它可以在瞬间转弯。
以下列输入为例。小车在时间为5的时候收到一个“向左转”的命令1,在时间10收到一个“向右转”的命令2,在时间15收到一个“停止”的命令3。那么在最后时间15的时候,小车的位置将在(-50,100)。程序只要求输出小车最后的位置,第一个整数是x坐标,第二个整数是y坐标。
输入
输入包含多个命令,每个命令由整数time和command组成,表示在时刻time发出命令command。command的取值范围1-3,含义如上所述。
输出
输出占一行,包含两个整数,表示小车的最终位置。两个整数之间由空格隔开。
样例输入 Copy
5 1 10 2 15 3
样例输出 Copy
-50 100
提示
此题信息量大,考查内容较为综合。
(1)数字化。可为四个方向编号,自向北开始,逆时针将4个方向依次编号为0,1,2,3。当接到向左转命令,方向号增1,向右转则方向号减1。为避免出现负数或大于3的情况,可对4取模。
#include <stdio.h>
#include <math.h>
int main(void) {
int time,command,x=0,y=0,d=0,preTime=0;
while (scanf("%d %d", &time,&command))
{
switch (d)
{
case 0: y+=(time - preTime)*10; break;
case 1: x-=(time - preTime)*10;break;
case 2: y-=(time - preTime)*10;break;
case 3: x+=(time - preTime)*10;break;
}
if(command == 3) {
break;
} else if(command == 1) {
d++;
}else {
d--;
}
d = (d + 4)%4;
preTime = time;
}
printf("%d %d\n",x,y);
return 0;
}
1071 分解质因子
#include <stdio.h>
#include <math.h>
// 分解质因子
int main(void) {
int i, j, n;
scanf("%d", &n);
j = n;
for(i = 2; i<=j; i++) {
while (n%i == 0) {
printf("%d ", i);
n = n/i;
if(n == 1) {
printf("\n");
}
}
}
return 0;
}
1072 青蛙爬井
#include <stdio.h>
#include <math.h>
int main(void) {
int high,up,down,height=0,day=0;
scanf("%d%d%d", &high,&up,&down);
while (height<high)
{
height = height+up>=high ? height+up: height+up-down;
day++;
}
printf("%d", day);
return 0;
}
1073 再谈鸡兔同笼问题
#include <stdio.h>
#include <math.h>
int main(void) {
int m,n,chicken = 0,rabbit = 0, i;
scanf("%d%d", &m,&n);
for(i=1; i<=m; i++) {
if(i*2 + (m-i)*4 == n) {
chicken = i;
rabbit = m - i;
}
}
if(chicken == 0 || rabbit == 0){
printf("No Answer");
}else {
printf("%d %d", chicken, rabbit);
}
return 0;
}
1074 百钱买百鸡
#include <stdio.h>
#include <math.h>
int main(void) {
int n, i, a = 0,b=0;
scanf("%d", &n);
for(i=0; i<=n; i++) {
while (a<n-i)
{
if((n-a-i)%3 == 0 && 5*i + 3*a + (n-a-i)/3 == n) {
b= n-a-i;
printf("%4d%4d%4d\n", i,a,b);
}
a++;
}
a = 0;
}
if(b == 0) {
printf("No Answer");
}
return 0;
}
1075 聚餐人数统计
#include <stdio.h>
#include <math.h>
int main(void) {
int n,cost, i, a = 0,b=0, flag = 0;
scanf("%d%d", &n,&cost);
for(i=0; i<=n; i++) {
while (a<=n-i)
{
if(3*i + 2*a + (n-a-i) == cost) {
b= n-a-i;
printf("%d %d %d\n", i,a,b);
flag = 1;
}
a++;
}
a = 0;
}
if(flag == 0) {
printf("No answer");
}
return 0;
}
1076 三位数求解
#include <stdio.h>
#include <math.h>
int main(void) {
int n, x, y = 0,z=0,flag = 0;
scanf("%d", &n);
for(x=1; x< 10; x++) {
while (y<10)
{
if((n-100*x - 110*y)%12 == 0) {
z= (n-100*x - 110*y)/12;
if(z>=0 &&z<10) {
printf("%4d%4d%4d", x,y,z);
flag = 1;
}
}
y++;
}
y = 1;
}
if(flag == 0) {
printf("No Answer");
}
return 0;
}
1077 空心菱形
#include <stdio.h>
#include <math.h>
void space(int n);
void star(int n, int i);
int main(void){
int i,j,k,m,n;
scanf("%d",&n);
for(i=1; i<=n; i++){
if(i==1) {
space(n-1);
printf("*");
} else{
star(n, i);
}
printf("\n");
}
for(j=n-1; j>0; j--) {
if(j == 1){
space(n-1);
printf("*");
} else{
star(n, j);
}
printf("\n");
}
return 0;
}
void space(int n) {
for (int i=1; i<=n; i++) {
printf(" ");
}
}
void star(int n, int i) {
space(n-i);
printf("*");
space(2*(i-1)-1);
printf("*");
}
1078 a+b(多实例测试1)
#include <stdio.h>
#include <math.h>
int main(void)
{
int n,i,a,b;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d %d",&a,&b);
printf("%d\n",a+b);
}
return 0;
}
1079 a+b(多实例测试2)
注:EOF是宏定义常量-1,scanf函数遇到文件结束标志函数返回值是-1,键盘输入时,ctrl+z表示输入结束
#include <stdio.h>
#include <math.h>
int main(void)
{
int a,b;
while(scanf("%d %d",&a,&b)!=EOF)
{
printf("%d\n",a+b);
}
return 0;
}