C语言10个数字判断问题

从1,2......10这10个数字中任取6个全组合输出(每组6个不同数字)并满足条件被3除余数为0有1至2个被3除余数为1有1至2个被3除余数为2有1至2个和值22至2... 从1,2......10这10个数字中任取6个全组合输出(每组6个不同数字)

并满足条件
被3除余数为0有1至2个
被3除余数为1有1至2个
被3除余数为2有1至2个
和值22至26

结果下面正确

1-2-3-4-5-9
1-2-3-4-6-8
1-2-3-5-6-7
展开
 我来答
_wisdom_yzh
2012-06-09 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:75
采纳率:0%
帮助的人:74.1万
展开全部
这是个递归的算法虽然复杂度比较高,但能解决问题
如果要写成递推的话可能比较麻烦,既然问题规模不大就不去耗费精力了

#include <stdio.h>

void getnumber(int n, int num, int mod_3_0,int mod_3_1, int mod_3_2,int value, int *output)
{
if (num != 0)
{
output[n] = num;
value -= num;
}

int i;
if (n < 5)
{
for (i = num + 1; i <= 10; i++)
{
if (i % 3 == 0 && mod_3_0 > 0)
getnumber(n + 1, i, mod_3_0 - 1, mod_3_1, mod_3_2, value, output);
else if (i % 3 == 1 && mod_3_1 > 0)
getnumber(n + 1, i, mod_3_0, mod_3_1 - 1, mod_3_2, value, output);
else if (i % 3 == 2 && mod_3_2 > 0)
getnumber(n + 1, i, mod_3_0, mod_3_1, mod_3_2 - 1, value, output);
}
}

if (n == 5 && value >= 0 && value <= 4)
{
for (i = 0; i < 5; i++) printf("%d-", output[i]);
printf("%d\n", output[5]);
return ;
}

if (num != 0) value += num;
}

int main()
{
int output[6];
getnumber(-1, 0, 2, 2, 2, 26, output);
return 0;
}
更多追问追答
追问
有错误编译不正确啊
追答
你确定?你什么编译器?我在gcc和vs2010上都编译对的
aAa9079
2012-06-06 · TA获得超过2289个赞
知道大有可为答主
回答量:1181
采纳率:100%
帮助的人:686万
展开全部
你看下面的代码是不是解决了你的问题:
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int i,j,k,l,n,m;
int yu0=0,yu1=0,yu2=0;
for(i=1;i<=5;i++)
{
for(j=i+1;j<=6;j++)
{
for(k=j+1;k<=7;k++)
{
for(l=k+1;l<=8;l++)
{
for(n=l+1;n<=9;n++)
{
for(m=n+1;m<=10;m++)
{
if(m%3==0)
yu0++;
if(m%3==1)
yu1++;
if(m%3==2)
yu2++;
if(i%3==0)
yu0++;
if(i%3==1)
yu1++;
if(i%3==2)
yu2++;
if(j%3==0)
yu0++;
if(j%3==1)
yu1++;
if(j%3==2)
yu2++;
if(k%3==0)
yu0++;
if(k%3==1)
yu1++;
if(k%3==2)
yu2++;
if(l%3==0)
yu0++;
if(l%3==1)
yu1++;
if(l%3==2)
yu2++;
if(n%3==0)
yu0++;
if(n%3==1)
yu1++;
if(n%3==2)
yu2++;
if(yu0==2&&yu1==2&&yu2==2&&i+j+k+l+n+m>21&&i+j+k+l+n+m<27)
{
printf("%d-%d-%d-%d-%d-%d\n",i,j,k,l,n,m);
}
yu0=0;yu1=0;yu2=0;
}
}
}
}
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
有你更精彩307
2012-06-06 · TA获得超过442个赞
知道答主
回答量:108
采纳率:100%
帮助的人:66.7万
展开全部
#include<stdlib.h>
#include<stdio.h>
main()
{ int i,k,x;
srand(time(NULL));
for(k=1;k<=3;k++)
{ for(i=1;i<=6;i++)
{ x=rand()%10+1;
printf("%d-",x);
if(x%3==0)
printf("%d-",x);
}
printf("\n");
}
}
追问
编译错误啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式