小习题:按要求求数

一.题目概要:

从键盘中输入三个数(m,n,s),n为位数,每位数的最大值为m,位数之和为s,请求出所有不重复的结果。

二.算法分析: 

(1)定义数字的取值范围,拿三位数举例,三位数的范围为100~mmm。代码如下:

int n,m,s;
int min=1,max;
printf("所输入的数字位数:");
scanf("%d",&n);
printf("每位数最大值:");
scanf("%d",&m);
printf("所有位之和为:");
scanf("%d",&s);
int a[n];

for(int i=0;i

 (2)进行循坏判断(本次拿四位数进行举例),从键盘中分别输入4,6,6。在循环前定义一个x变量,用来找出满足条件的数字。然后分别取出它的每位数的数字,再将他们加起来,与键盘中所输入的m值进行比较。

while(x)
{
	a[i++]=x%10;
	x/=10;
}
for(int j=0;j

(3)与m比较,若满足,则将它们的每位数的数字按一定排序方法排序,为什么这么做呢?因为题目中要求不能出现重复的结果,也就是说进行判定后,我们还要筛选一下,把位数数字相同的给排除掉,所以我们可以先利用之前求和用到的数字,来对位数进行排序,排完之后,再将他们转为4位数,注意:别把0放在第一位,不然编译运行时,可能会变为三位数。

if(sum==s)
{
	for(int i=0;i

三.代码展示:

#include

int main()
{
	int n,m,s;
	int min=1,max;
	printf("所输入的数字位数:");
	scanf("%d",&n);
	printf("每位数最大值:");
	scanf("%d",&m);
	printf("所有位之和为:");
	scanf("%d",&s);
	int a[n];

	for(int i=0;i=min && num<=max;num++)
	{
		int sum=0;
		int i=0;
		int x=num;
	
		while(x)
		{
			a[i++]=x%10;
			x/=10;
		}
		for(int j=0;j

四.结果:

小习题:按要求求数_第1张图片

 

你可能感兴趣的:(典型例题,算法,笔试题)