实验

编写程序实现以下功能

  1. 编写程序,打印99乘法表
  2. 将一面额为10元倍数的整钱(<=100元)换成1元、2元和5元的零钱组合(每种面值都要有)。输入要换的面额(如10元),输出所有可能的换法(如2种)。
    进阶:若希望换出来的零钱数量越少越好,怎么修改程序可以很快得到最优方案?
  3. 输入一行字符,统计其中单词的个数。各单词之间用空格分隔,空格数可以是多个。
    输入输出示例
    Input words: The sum of the odd numbers.
    Count = 6
    程序1:九九乘法表(下三角)
#include<stdio.h>

int main()
{
    for(int i=1; i<=9; i++)  //外循环控制列
    {
        for(int j=1; j<=i; j++)
        {
            printf("%d*%d=%.2d\t",j,i,j*i);//内循环控制行
        }
        printf("\n");
    }
    printf("\n");
    return 0;
}

程序2:换零钱
思路:将所有符合要求的每一种零钱零钱数量用数组存放起来

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

int main(void)
{
    int x,y,i = 0, z,min,j,m;   //x->¥1  y->¥2  z->¥5
    int a[100], f[93],s[47],t[19];//a[] :存放满足组合的和   f[]:存放满足组合一元的数量 s[]:存放满足组合二元的数量 t[]:存放满足组合五元的数量
    int  sum_money; // 总额

    printf("请输入需要转换的钱[面额为10元倍数的整钱(<=100元)]\n");
    scanf("%d",&sum_money);

    int  b = sum_money-7,c =  (sum_money - 6)/2, d = ( sum_money - 3)/5;  //缩小范围

    printf("所有方案如下:\n");

    for(x = 1; x <= b; x++) // ¥1
    {
        for(y = 1; y <= c; y++) //¥2
        {
            for(z = 1; z <= d; z++) //¥5
            {
                if(x + 2*y + 5*z == sum_money)
                {
                    printf("¥1:%2d  ¥2:%2d  ¥5:%2d\n",x,y,z);
                    a[i] = (x+y+z);
                    f[i] = x;
                    s[i] = y;
                    t[i] = z;
                    i++;
                }
            }
        }
    }
    
    // 判断所有组合中钱数量最少的组合
    min = a[0];
    x = 0, y = 0,z = 0;

    for(j = 1; j < i; j++)
    {
        if(a[j] < min)
        {
            m = min;
            min = a[j];
            a[j] = m;
            x = j;
            y = j;
            z = j;
        }
    }
    printf("零钱数量最少为:%d\n方案为:\n1¥:%d  2¥ : %d  5¥:%d\n",min,f[x],s[y],t[z]);
}
 

程序3:单词统计

#include<stdio.h>

void main() {
    char c;
    int word = 0;
    printf("Please input a  sentence:");
    for(    ; (c=getchar())!='\n';)
    {
        if(c==' ')continue;
        else for(    ;   (c=getchar())!='\n';    )
            {
                if(c==' ')
                {
                    word++;
                    break;
                }
            }
    }
    printf("This sentence have %d words",word+1);// 由于最后输入'\n' 退出循环 即最后一个单词未统计 所以word+1
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值