c语言刷题之旅day1,题目1-3

文章讲述了三个编程问题:统计1-2020年每个数位上字符2出现的次数,计算1到2020之间既约分数的数量,以及求解蛇形数组中特定位置的数字。通过核心代码展示了如何使用C语言实现这些计算。
摘要由CSDN通过智能技术生成

题目1(1-2020,位数出现过多少次数字2)

在1-2020的数位上,共出现过多少次字符2。

如:222,出现了3次。

核心代码:

#include<stdio.h>
int main()
{
	int count = 0;
	//历遍所有数字
	for (int i = 1; i <= 2020; i++)
	{
		int num = i;//存一个新的数值,方便除
		//下面是判断一个数字上出现过几次字符2
		//如2020
		//1.202,count=0
		//2.20,count=1
		//3.2,count=1
		//4.0,count=2
		while (num > 0)
		{
			if (num % 10 == 2)
			{
				count++;
			}
			num /= 10;
		}
	}
	printf("%d", count);
}

答案是:624。 

题目2(既约分数)

如果一个分数的分子和分母的最大公约数是1,这个分数称为既约分数。请问,有多少个既约分数,分子和分母都是1到2020之间的整数(包括1和2020)

核心代码:

#include <stdio.h>

// 计算两个数的最大公约数(欧几里德算法)
int gcd(int a, int b) 
{
    while (b != 0) 
    {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

int main() 
{
    int count = 0;

    // 遍历分子和分母的组合
    for (int numerator = 1; numerator <= 2020; numerator++) 
    {
        for (int denominator = 1; denominator <= 2020; denominator++) 
        {
            // 判断最大公约数是否为1,即是否为既约分数
            if (gcd(numerator, denominator) == 1) 
            {
                count++;
            }
        }
    }

    printf("1到2020之间的既约分数的个数为:%d\n", count);
    return 0;
}

答案:2481215。

题目3:蛇形数组

思路1:

#include <stdio.h>

#define MAX_SIZE 41 // 因为我们需要计算到第41条对角线

int main() 
{
    int matrix[MAX_SIZE][MAX_SIZE] = { 0 }; // 初始化一个足够大的矩阵
    int num = 1; // 用于填充的数字
    int i, j;

    // 按照蛇形填数的规则填充矩阵
    for (int diag = 0; diag < 2 * MAX_SIZE - 1; ++diag) 
    {
        if (diag < MAX_SIZE) 
        {
            // 对角线从左下角开始向右上角填充
            for (i = diag, j = 0; i >= 0; --i, ++j) 
            {
                matrix[i][j] = num++;
            }
        }
        else 
        {
            // 对角线从左下角开始向右上角填充
            for (i = MAX_SIZE - 1, j = diag - MAX_SIZE + 1; j < MAX_SIZE; --i, ++j) 
            {
                matrix[i][j] = num++;
            }
        }
    }

    // 输出坐标(20, 20)的值
    printf("The number at (20, 20) is %d\n", matrix[20][20]);

    return 0;
}

思路2:

我们需要找到蛇形填数矩阵中坐标 (20, 20) 对应的数字。这个矩阵是从左上角开始,沿着对角线依次填充的。每条对角线的起始数字是前一条对角线的起始数字加上对角线的序号。 

#include <stdio.h>

int main() 
{
    int targetRow = 20, targetCol = 20;
    int diag = targetRow + targetCol; // 对角线的序号
    int num = 1; // 对角线的起始数字
    int increment = 1; // 对角线上数字的增量

    // 计算第 41 条对角线的起始数字
    for (int i = 1; i <= diag; ++i) 
    {
        num += i;
    }

    // 计算对角线上的第 21 个数字
    int result = num + targetRow;

    printf("The number at (%d, %d) is %d\n", targetRow, targetCol, result);

    return 0;
}

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蓝lanll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值