【EDUcoder实训作业】找出最小值&&黑洞问题

一、实验目的:
1.深入理解循环结构程序的设计思想,熟悉和掌握while 语句、do—while语句和for语句的使用规则和流程。
2. 掌握嵌套的循环结构的实现。 
3.掌握break语句、continue语句的功能及其异同。 
4.掌握在程序设计中用循环的方法实现各种算法(如穷举、累加(累乘)、迭代等)。
5.进一步熟练程序调试的技能。
二、实验内容:
项目1 找出最小值
【项目任务】输入一个正整数 n, 再输入 n 个整数,找出其中的最小值。试编写相应程序。
【项目目的】
(1)正确使用for循环;
(2)理解“排序”算法的开始思路。
程序源代码

#include <stdio.h>
int main()
{
    int i,n,t;
    scanf(%d”,&n);
    int a[n];
    for(i=0;i<n;i++)
    {
        scanf(%d”,&a[i]);
    }
    t=a[0];
    for(i=0;i<n;i++)
    {
        if(t>a[i])
        {
            t=a[i];
        }
    }
    printf(%d”,t);
    return 0;
}

项目2 黑洞数问题
【项目说明】黑洞数也称为陷阱数,又称“ Kapreka 问题”,是一类具有奇特转换特性的数。任何一个数字不全相同的三位数,经有限次 “重排求差”操作(即组成该数的数字重排后的最大数减去重排后的最小数),总会得到 495 。最后所得的 495 即为三位黑洞数,四位黑洞数为6174。
【项目任务】
验证黑洞数问题。
例如,对三位数207:
第1次重排求差得:720-27 = 693
第2次重排求差得:963-369 = 594
第3次重排求差得:954-459 = 495
以后会停留在495这一黑洞数。如果三位数的 3 个数字全相同,一次转换后即为 0 。
输入一个三位数n ,编程给出重排求差的过程。
程序源代码

#include<stdio.h>
void paixu(int* g,int* s,int* b)//利用指针函数分别求出个位、十位、百位。
{
    int t;
    if(*g>*b)
    {
        t=*b;
        *b=*g;
        *g=t;
    } 
    if(*g>*s)
    {
        t=*s;
        *s=*g;
        *g=t;
    }
    if(*s>*b)
    {
        t=*s;
        *s=*b;
        *b=t;
    }

}
int main()
{
    int n,m=0,ge,shi,bai,chuzhi=0,mozhi=0,jieguo=0;
    scanf(%d”,&n);
    printf(“对三位数%d:\n”,n);
    do
    {
        m++;
        ge=n%10;
        shi=n/10%10;
        bai=n/100;
        paixu(&ge,&shi,&bai);
        if(ge==shi==bai)
        {
            printf(“第%d次重排求差得:0\n”,m);
        }
        else if(ge==0)//讨论个位为0的情况
        {
            if(ge==0&&shi!=0)//个位为0,十位不为0
            {
                chuzhi=bai100+shi10+ge;
                mozhi=shi10+bai;
                jieguo=bai100+shi10+ge-shi10-bai;
                printf(“第%d次重排求差得:%d-%d=%d\n”,m,chuzhi,mozhi,jieguo);
                n=bai100+shi10+ge-shi10-bai;
            }
            else//个位为0,十位为0
            {
                chuzhi=bai100+shi10+ge;
                mozhi=bai;
                jieguo=bai100+shi10+ge-bai;
                printf(“第%d次重排求差得:%d-%d=%d\n”,m,chuzhi,mozhi,jieguo);
                n=bai100+shi10+ge-bai;
            }
        }
        else个位,十位,百位都不为0
        {
            chuzhi=bai100+shi10+ge;
            mozhi=ge100+shi10+bai;
            jieguo=bai100+shi10+ge-ge100-shi10-bai;
            printf(“第%d次重排求差得:%d-%d=%d\n”,m,chuzhi,mozhi,jieguo);
            n=bai100+shi10+ge-ge100-shi10-bai;
        }
        if(n==495)//当n为495时跳出循环
        {
            break;
        }
    }while(1);
    return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值