用最基本的c语言编程。将1-9这九个数分为三个三位数,要求第一个3位数,正好是第二个三位数的三倍, 30

用最基本的c语言编程。将1-9这九个数分为三个三位数,要求第一个3位数,正好是第二个三位数的三倍,是第三个三位数的三倍。问怎样分法。[要求用最基本的c语言编程,要有完整的... 用最基本的c语言编程。将1-9这九个数分为三个三位数,要求第一个3位数,正好是第二个三位数的三倍,是第三个三位数的三倍。问怎样分法。[要求用最基本的c语言编程,要有完整的程序和对于程序的描述]急求!谢谢!! 展开
 我来答
百度网友57796b9
2017-06-19 · TA获得超过372个赞
知道小有建树答主
回答量:226
采纳率:83%
帮助的人:88.6万
展开全部

先给出结果:

代码思路:

对元素为1-9的数组进行位置交换,递归求出全排列,对每一个排列结果检查是否存在题目提出的关系,存在则输出结果。

代码实现如下:

#include <stdio.h>
#include <stdint.h>

#define N 9

uint8_t arrayRaw[N];
uint16_t num1 = 0, num2 = 0, num3 = 0;
uint32_t index = 0;

void print();
void perm(int); /*求数组的全排列 */
void swap(int, int);

void print(void)
{
uint16_t i;

printf("[%d]", index);
for (i = 0; i < N; ++i)
{
printf(" %d ", arrayRaw[i]);
}
printf("\n");
}

void trible_check(void)
{
num1 = arrayRaw[0] * 100 + arrayRaw[1] * 10 + arrayRaw[2];
num2 = arrayRaw[3] * 100 + arrayRaw[4] * 10 + arrayRaw[5];
num3 = arrayRaw[6] * 100 + arrayRaw[7] * 10 + arrayRaw[8];

if ( (num1*2 == num2) && (num1*3 == num3) )
{
print();
printf("num1=%d\r\n", num1);
printf("num2=%d\r\n", num2);
printf("num3=%d\r\n", num3);
}
}

void swap(int i, int offset)
{
int temp;

temp = arrayRaw[offset];
arrayRaw[offset] = arrayRaw[i];
arrayRaw[i] = temp;
}

void perm(int offset)
{
uint16_t i;

if (offset == N - 1)  // BaseCase
{
index++;
//  print();
trible_check();
return;
}
else
{
for (i = offset; i < N; ++i)
{
swap(i, offset);//交换前缀
perm(offset + 1);//递归
swap(i, offset);//将前缀换回来,继续做前一次排列
}
}
}

int main()
{
uint16_t i;

for (i = 0; i < N; ++i)
{
arrayRaw[i] = i + 1;
}
perm(0);
printf("index=%d\r\n", index);

        return 0;
}
VIP晓建
2015-06-27 · 超过21用户采纳过TA的回答
知道答主
回答量:64
采纳率:100%
帮助的人:21万
展开全部

题意是如此我就这样写了,最基础的语句,

更多追问追答
追问
图片看不清楚,可以发文字版吗
追答
字数超限制了,你自己看吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-06-27
展开全部
是不是第二个是第一个的2倍,第三个是第一个的3倍
更多追问追答
追问
是的
追答
#include "stdio.h"
void main()
{
int i,j,k,m,flag=1;
int a[10]={0};
for(i=123; i1||a[0]!=0)
flag=0;

if(flag)
printf("%d %d %d\n",i,j,k);

for(m=0; m<10; m++)
a[m]=0;
flag=1;
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幻想家张11
2019-01-14
知道答主
回答量:1
采纳率:0%
帮助的人:782
展开全部
#include<stdio.h>
void dfs(int step,int a[10],int book[10]);
int main()
{
int a[11],book[10]={0};
printf("0");
dfs(0,a+1,book);
system("pause");
return 0;
}
void dfs(int step,int a[10],int book[10])
{
int i;
if(step>=10)
{
if(2*(a[0]*100+a[1]*10+a[2])==(a[3]*100+a[4]*10+a[5])&&3*(a[0]*100+a[1]*10+a[2])==(a[6]*100+a[7]*10+a[8]))
printf("%d,%d,%d\n",a[0]*100+a[1]*10+a[2],a[3]*100+a[4]*10+a[5],a[6]*100+a[7]*10+a[8]);
return;
}
for(i=0;i<10;i++)
{
if(book[i]==0)
{
a[step]=i;
book[i]=1;
dfs(step+1,a,book);
book[i]=0;
}
}
return;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
祈祷7654321
2015-06-27 · TA获得超过415个赞
知道小有建树答主
回答量:275
采纳率:100%
帮助的人:202万
展开全部

192 384 576
219 438 657
273 546 819
327 654 981

只有这几个数。

 
更多追问追答
追问
谢谢,不过我要的不是答案,是程序的算法
要c语言的编程语句
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式