这个程序应该怎么编,谢谢各位高手。
一个这样的程序,输入N个数,任意取中间的几个数,数值相加的值为M的倍数,输出每组数,输出的形式可以用类似a1,a1a2,a1a4a7........这样的形式。上学时候学...
一个这样的程序,输入N个数,任意取中间的几个数,数值相加的值为M的倍数,输出每组数,输出的形式可以用类似a1, a1a2, a1a4a7........这样的形式。
上学时候学过编程,现在已经忘得差不多了,朋友让我帮他写个小程序,希望大家帮帮忙,或者给点提示也行,谢谢。分有的是,我会加到最高分。
嗯 在dos界面下运行就可以 谢谢你
谢谢大家 用c语言编写最好 其他的也可以 n的值不确定 但是不会太多 m的值是手动指定的
我举个例子吧
比如说
先输入 1 3 5 4 2 5 6 2 这几个数 (分别对应为a1 a2 a3 a4 a5 a6 a7 a8) 回车 然后再输入3 回车 也就是找3的倍数 然后输出每种组合, a2,a7,a1a3,a1a6.......
这样 不知道表述清楚没有 谢谢各位 展开
上学时候学过编程,现在已经忘得差不多了,朋友让我帮他写个小程序,希望大家帮帮忙,或者给点提示也行,谢谢。分有的是,我会加到最高分。
嗯 在dos界面下运行就可以 谢谢你
谢谢大家 用c语言编写最好 其他的也可以 n的值不确定 但是不会太多 m的值是手动指定的
我举个例子吧
比如说
先输入 1 3 5 4 2 5 6 2 这几个数 (分别对应为a1 a2 a3 a4 a5 a6 a7 a8) 回车 然后再输入3 回车 也就是找3的倍数 然后输出每种组合, a2,a7,a1a3,a1a6.......
这样 不知道表述清楚没有 谢谢各位 展开
6个回答
展开全部
//以下程序先输入一个数,表示N。N不超过10。当然这个值可以由你自己用define来定义
//然后输入N个数,再输入M,程序会在N个数中找到和为M的倍数的所有数的组合
//程序的算法:用一个长度同样为N的标志数组tag,来模拟N位的二进制数从0变化到2^n-1的过程
//如果某个二进制数第i位为1,那么就表示输入的N个数中的第i个数在所要求的组合中。
//用这个方法,可以遍历N个数的全部可能的2^n种排列组合。
#include "stdio.h"
#include "stdlib.h"
#define N 10
main()
{
int a[N],n,i,m;
char tag[N];
long s;
//这段代码是用于处理输入和初始化的
printf("input N:");
scanf("%d",&n);
printf("input %d numbers:",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("input M:");
scanf("%d",&m);
for(i=0;i<n-1;i++)
tag[i]=0;
tag[n-1]=1; //一个数都不选,这种组合肯定不是答案,所以直接从选一个数开始
printf("\n");
while(1)
{
s=0;
for(i=0;i<n;i++)
if(tag[i])
s+=a[i]; //如果二进制数的第i位是1,选中第i个数
if(s%m==0)
{
for(int j=0;j<n;j++)
if(tag[j])
printf("%d ",a[j]);
printf("\n");
}
//这段是模拟将一个N位二进制数加1的过程
tag[n-1]++;
i=n-1;
while(i>0 && tag[i]==2)
{
tag[i]=0;
tag[i-1]++;
i--;
}
if(i==0 && tag[0]==2) //如果已经将模拟的二进制数遍历到2^n,结束遍历
break;
}
return 0;
}
//然后输入N个数,再输入M,程序会在N个数中找到和为M的倍数的所有数的组合
//程序的算法:用一个长度同样为N的标志数组tag,来模拟N位的二进制数从0变化到2^n-1的过程
//如果某个二进制数第i位为1,那么就表示输入的N个数中的第i个数在所要求的组合中。
//用这个方法,可以遍历N个数的全部可能的2^n种排列组合。
#include "stdio.h"
#include "stdlib.h"
#define N 10
main()
{
int a[N],n,i,m;
char tag[N];
long s;
//这段代码是用于处理输入和初始化的
printf("input N:");
scanf("%d",&n);
printf("input %d numbers:",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("input M:");
scanf("%d",&m);
for(i=0;i<n-1;i++)
tag[i]=0;
tag[n-1]=1; //一个数都不选,这种组合肯定不是答案,所以直接从选一个数开始
printf("\n");
while(1)
{
s=0;
for(i=0;i<n;i++)
if(tag[i])
s+=a[i]; //如果二进制数的第i位是1,选中第i个数
if(s%m==0)
{
for(int j=0;j<n;j++)
if(tag[j])
printf("%d ",a[j]);
printf("\n");
}
//这段是模拟将一个N位二进制数加1的过程
tag[n-1]++;
i=n-1;
while(i>0 && tag[i]==2)
{
tag[i]=0;
tag[i-1]++;
i--;
}
if(i==0 && tag[0]==2) //如果已经将模拟的二进制数遍历到2^n,结束遍历
break;
}
return 0;
}
展开全部
这个你要告诉大家让具体的题目,就是变量M的值要确定。然后再让大家编写,还有用什么误言编写也要说清楚。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不好意思,编程倒是没有问题,可是我理解能力差。请问M是多少?中间几个数是不是从这些数中随机取的?输出形式到底是怎样的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-11-07
展开全部
N的范围多少的 如果大的话我的思路写出来的程序比较慢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-11-07
展开全部
程序是可以在dos界面下运行的嘛?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询