编写程序实现以下功能
- 编写程序,打印99乘法表
- 将一面额为10元倍数的整钱(<=100元)换成1元、2元和5元的零钱组合(每种面值都要有)。输入要换的面额(如10元),输出所有可能的换法(如2种)。
进阶:若希望换出来的零钱数量越少越好,怎么修改程序可以很快得到最优方案? - 输入一行字符,统计其中单词的个数。各单词之间用空格分隔,空格数可以是多个。
输入输出示例
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
}