ZZULIOJ 1060-1079(C语言)

文章概述了10个编程题目,涉及C语言实现的逆序数字、顺序输出、计算最大公约数与最小公倍数、字符加密、数字统计、字符分类、解决实际问题如里程表和小汽车位置等,展示了不同算法和数学应用。
摘要由CSDN通过智能技术生成

题目来源:ZZULIOJ

目录

题目来源:ZZULIOJ

1060 逆序数字

1061 顺序输出各位数字

1062 最大公约数

1063 最大公约与最小公倍

1064 加密字符

1065 统计数字字符的个数

1066 字符分类统计

1067 有问题的里程表

1068 二进制数

1069 向z同学学习

1070 小汽车的位置

1071 分解质因子

1072 青蛙爬井

1073 再谈鸡兔同笼问题

1074 百钱买百鸡

1075 聚餐人数统计

1076 三位数求解

1077 空心菱形

1078 a+b(多实例测试1)

1079 a+b(多实例测试2)

 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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值