湖大2015 案列分析题,给出一个四位数,判断是不是11的整数倍

本文介绍了一个使用C语言编写的程序,该程序接收一个四位数作为输入,并检查该数是否为11的倍数。如果不是,则通过重新排列数字并检查新组合是否为11的倍数来寻找符合条件的数,并将最大符合条件的数输出。

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

我也是醉了,还有两天就要考试了(当然了,我也是准备考湖大的829的)才发现这题目,我居然没有做过。然后百度,Google了一下,也没有热心人给出答案,看到一个知乎上的朋友发出求助,结果下面的沙发、看客表示收费解答。没办法,只能自己来动手了。

首先,题目是这样的:

给一个四位数,先判断是不是11的整数倍,若是则输出,不是就把四位数重新排列,在形成的新的四位数中判断是不是11的整数倍,若是则存到文件”output.dat”;然后再求文件”output.dat”中最大的数,输出。

由于对文件操作不熟,所以对于从文件中取出最大的那个数,我就没有按题目要求给出了。

void main(){
    int x=8912, reverse;    //8912
    if( x%11 == 0 ){
        printf("result:%d\n", x);   
    }else{
        int m[4],i=0, ret[6], j=0, max=0;
        for( ; i<4; i++){
            m[i] = x%10;
            x = x/10;
        }
        if( m[0] == m[1] && m[0] == m[2] && m[0] == m[3] ){
            return ;        // 4 same integer
        }
        FILE* fp = fopen("output.dat", "w+");
        if( fp == NULL ){
            printf("file open failure!\n");
            return ;
        }
        i = 0;
        while( i<4 ){
            memset(ret, 1, sizeof(ret));
            if( m[0] != 0 ){
                ret[0] = m[0]*1000 + m[1]*100 + m[2]*10 + m[3];
                ret[1] = m[0]*1000 + m[1]*100 + m[3]*10 + m[2];
                ret[2] = m[0]*1000 + m[2]*100 + m[1]*10 + m[3];             
                ret[3] = m[0]*1000 + m[2]*100 + m[3]*10 + m[1];
                ret[4] = m[0]*1000 + m[3]*100 + m[1]*10 + m[2];
                ret[5] = m[0]*1000 + m[3]*100 + m[2]*10 + m[1];
                for(j=0; j<6; j++){
                    if( ret[j]%11 == 0 ){
                        fprintf(fp, "%d", ret[j]);
                        fprintf(fp, "%c", ' ');
                        if(max<ret[j])
                            max = ret[j];
                    }
                }
            }
            int tmp = m[0]; m[0] = m[i];    m[i++] = tmp;   
        }
        fclose(fp);
        printf("final result:%d\n", max);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值