c语言例题

本文介绍了三个C语言编程题目:1. Cantor表的编号规律,解析了如何根据行数找出第N项的数;2. 学生成绩表的处理,利用结构体数组存储学生信息并计算平均成绩;3. 摘苹果问题,涉及椅子高度、手长、力气等条件,通过排序解决最多能摘多少苹果的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Cantor表
现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
1/1,1/2,1/3,1/4,1/5,…
2/1,2/2,2/3,2/4,…
3/1,3/2,3/3,…
4/1,4/2,…
5/1,…
我们以Z字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,…
现在输入一个整数N,输出第N项的数
求解思路:
当我们发现规律不容易找出来时,不妨按照编号把Cantor表多打一点:
1/1
1/2 2/1
3/1 2/2 1/3
1/4 2/3 3/2 4/1
5/1 4/2 3/3 2/4 1/5
1/6 2/5 3/4 4/3 5/2 6/1…
这样我们就容易发现规律:
每一行的数的个数就是该行的行数;
当行数为奇数时,第一个数的分子是该行的行数,分母是1,然后分子逐个减1,分母逐个加1;
当行数为偶数时,第一个数的分母是该行的行数,分子是1,然后分母逐个减1,分子逐个加1;

#include<stdio.h>
int main()
{
   
    int n, m, a, b, i, s=0;
    scanf( "%d", &n );//输入n//
    for( i = 1; ;i++ )//用for循环判断n在哪一行//
    {
   
        a = i + 1;
        s = s + i;
        if( n >= s && (n-s)<=a )
        {
   
            break;
        }
        else
        {
   
            continue;
   	}
    }
    b = n - s;//用b来计算分子和分母//
    if( a == 2 && b == 0 )//n在第一行时输出1//
    {
   
        m = 1;
        printf("%d",m);
    }
    else if( a == 2 && b != 0 )//n在第二行时输出//
    {
   
        printf( "%d/%d", b, a-b+1);
    }
    else if( a % 2 == 0 && a > 2 )//n在偶数行时的输出//
    {
   
        printf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值