C语言初级—用一角,两角,五角和一元组成3.5元有多少种组合方法

c语言实现用一角,两角,五角和一元组成3.5元有多少种组合方法

基本思想

列出这一个问题的所有可能性,并用判断语句得到符合要求的结果并计数

具体代码如下

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int choice(int num) {
	
	
	int  count = 0;
	for (int a=0;a<=num/1;a++)
	{



		for ( int b=0;b<=num/2;b++)
		{





			for (int c = 0; c <= num / 5;c++) {



				for (int d = 0; d <= num / 10;d++) {

					if (a*1+b*2+c*5+d*10==num)
					{
						count++;
					}
				}
			}
		}
	}
	return count;
				
}
int main() {
	int num=35;
	
	
	int result=choice(num);
	printf("%d", result);
	return 0;
}

结果经测试有140种

如果想进行任意金额的组合,可以对主函数体进行改动

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int choice(int num) {
	
	
	int  count = 0;
	for (int a=0;a<=num/1;a++)
	{



		for ( int b=0;b<=num/2;b++)
		{





			for (int c = 0; c <= num / 5;c++) {



				for (int d = 0; d <= num / 10;d++) {

					if (a*1+b*2+c*5+d*10==num)
					{
						count++;
					}
				}
			}
		}
	}
	return count;
				
}
int main() {
	int num;
	scanf("%d", &num);
	
	int result=choice(num);
	printf("%d", result);
	return 0;
}

只需要将35改成从键盘接收的一个数就可以实现任意金额的组合 

同时注意,如果在vs2016往后版本上运用scanf函数是,系统会提示不安全

因此我们一般用scanf-s函数或者在头文件第一行加上#define _CRT_SECURE_NO_WARNINGS

但是在c语言以及大部分语言的环境下scanf-s会出现搬运上的错误,可能会出现在不同的编译器上产生的结果不同或者不能正常运行。

因此尽量采用在头文件第一行加#define _CRT_SECURE_NO_WARNINGS的方法

思考

在所给出的代码中将要求的3.5以35输入,可以看出是将3.5元当成35角,那么为什么不可以直接用3.5元进行测试,首先,所给出的代码段中如果输入3.5元进行测试,会发生数据的泄露,如果进行更改,将输入数据改成double类型,表面上解决了不能直接输入元的问题。但是在实际操作时,int类型与double类型产生的结果不尽相同。按照要求,若在此情况下进行的测试,int类型对应140种结果,而double类型对应只有86种结果。

为什么会出现如此大的偏差,实际上,这就和double类型的特性有关,double对应双精度的类型,所以如果从键盘中输入3.5实际说不准确的,因此会产生偏差,在double输入时,正确应该输入3.50000.....。但是因为没有精度要求,所以要输入几个0我们我无从得知。从这个题目我们可以看到在使用double 类型以及关于double类型的转换时,都要关注精度对结果的影响。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值