C语言 百炼成钢17

//题目49:老师将糖果分成若干份,让学生按任意次序领取,第一个领取的,得到1份加上剩余糖果的1/10,
//第二个领取的,得到2份加上剩余糖果的1/10,第三个领取的,得到3份加上剩余糖果的1/10,以此类推,
//求共有多少个学生,多少份糖果

#include<stdio.h>
#include<stdlib.h>

//思路:该题的要求是求一个糖果的数量,这个数量必须保证每个学生领取到的糖果都是整份数,并不要求所有学生分的糖果分数一样
//根据多定义变量,简化运算难度规则,定义有x个学生,y份糖果
//通过列举,找出规律:
//1+(y-1)*(1/10)  第一个学生领取的糖果数量
//抽象函数
//f(1)=1+(y-1)*(1/10)
//因为每个学生领取到的糖果都是整份数,所以(y-1)*(1/10) 是整数,说明y-1是10的倍数
//那么y=10n+1
//通过枚举可以得到y的数量
//定义一个变量last,来存储糖果的剩余量,一直到last=0为止
//第一次 last=y-第一个学生领取的糖果数量,即last=y-1-(y-1)*(1/10) ---在枚举过程中y是个已知量
//第二次 last=last-第二个学生领取的糖果数量,即last=last-(2+(last-2)*(1/10))
//此时需要保证 last-2是10的倍数,即(last-2)%10==0,不满足这个条件,苹果的数量就要发生变化
//y=10n+1将n++
//还需要last>0
//当last==0时,获得正常的学生数量和糖果数量
//当last<0时,说明糖果数量不正常,需要将n++ ,再次循环
//第三次 lats=last-第三个学生领取的糖果数量,即last=last-(3+(last-3)*(1/10))

//不确定循环次数,使用while循环

void main(){
    //定义自增变量
    int n = 1;
    //定义每次糖果剩余数量
    int last = 10 * n + 1;
    //定义学生人数
    int index = 1;
    while (1){
        //一次都没有循环时,剩余糖果数量等于总糖果数量
        //开始循环
        //开始第一次
        //剩余苹果的数量必须是10的倍数
        if ((last - index)%10!=0)
        {
            //说明本次的糖果总数量不满足所有条件
            n++;
            //初始化所有数据
            last = 10 * n + 1;
            index = 1;
            //进行下一次循环
            continue;
        }
        last = last - (index + (last - index)/10);
        if (last == 0)
        {
            //说明本次的糖果总数量满足所有条件
            break;
        }
        else if (last>0)
        {
            index++;
        }
        else{
            //说明本次的糖果总数量不满足所有条件
            n++;
            //初始化所有数据
            last = 10 * n + 1;
            index = 1;
            //进行下一次循环
            continue;
        }
        if (n>100)
        {
            printf("看来我写的代码已经出错了!\n");
            break;
        }

    }
    if (index!=1)
    {
        printf("一共有%d个学生,糖果一共有%d份\n", index, 10 * n + 1);
    }
    system("pause");
}

时间: 2024-12-12 20:59:14

C语言 百炼成钢17的相关文章

C程序设计语言练习题1-7

练习1-7 编写一个打印EOF的值的程序. #include <stdio.h> // 包含标准库的信息. int main() // 定义名为main的函数,它不接受参数值. { // 输出EOF. printf("EOF对应的整形数是%d.\n",EOF); getch(); // 防止控制台一闪而过,需要接受任意字符后在关闭控制台. return 0; // 向执行环境返回一个整形,0代表执行成功. } 个人理解: 通过程序打印,可以看到EOF对应的整形数为-1.

C语言 百炼成钢21

//题目57:编写一个业务函数,实现字符串(前后各有三个空格,单词前后也均有空格) //" i am student, you are teacher " , //各个单词首字符大写,结果如下" i am student, you are teacher " , //要求1:实现所有接口 70 //要求2:写出测试程序 30 #include<stdio.h> #include<stdlib.h> #include<string.h&g

C语言 百炼成钢22

/* 题目58: 编写一个业务函数,实现按行读取文件.把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出. 函数原型有两个,任意选择其一 要求1:请自己任意选择一个接口(函数),并实现功能:70分 要求2:编写测试用例.30分 要求3:自己编写内存释放函数 */ #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> //按行读取文件 int

C语言 百炼成钢27

/* 题目63:编写C++程序完成以下功能: (1)声明一个纯虚函数类Shape(形状),其中包含来计算面积.计算周长的方法: (2)从Shape派生两个类矩形和圆形: (3)从矩形派生正方形: (4)分别实现派生类构造函数.析构函数和其他方法: (5)创建派生类的对象,观察构造函数.析构函数调用次序: (6)利用抽象类做函数参数(基类指针指向子类对象,多态特性),计算不同对象的面积和周长. */ #define _CRT_SECURE_NO_WARNINGS #include<iostream

C语言 百炼成钢16

//题目46:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只 //猴子把多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了 //一个,它同样把多的一个扔入海中,拿走了一份,第三.第四.第五只猴子都是这样做的, //问海滩上原来最少有多少个桃子? #include<stdio.h> #include<stdlib.h> //分析:最少有多少个桃子,说明是满足条件的最小数:假设有X个桃子,第一个猴子的桃子数量是(X-1)/5,

C语言 百炼成钢11

//题目31:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 //判断第二个字母. #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> //分析:通过输入的字母判定星期几,可以使用if()else void main(){ char str[7] = { 0 }; scanf("%s",str); switc

C语言 百炼成钢10

//题目28:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第 //3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后 //问第一个人,他说是10岁.请问第五个人多大? #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> //分析:经过阅读,发现f(5)=f(4)+2;f(4)=f(3)

C语言 百炼成钢2

//题目5:输入三个整数x,y,z,请把这三个数由小到大输出. #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> void sortnum(int *x,int *y,int *z){ int temp = 0; if (*x>*y) { temp = *x; *x = *y; *y = temp; } if (*y>*z) { temp = *z; *z = *y; *y = te

C语言 百炼成钢12

//题目34:对10个数进行排序 #include<stdio.h> #include<stdlib.h> //分析:使用冒泡排序 void main(){ int arr[10] = { 9, 2, 4, 7, 5, 71, 45, 46, 7, 8 }; //定义临时变量 int temp = 0; //冒泡排序 双循环 for (int i = 0; i < 10; i++) { for (int j = i+1; j <10; j++) { if (arr[j-