c语言横竖斜都等于15原理,请问个很菜的有关问题,C语言写横竖斜相加都等于15的程序...

请教个很菜的问题,C语言写横竖斜相加都等于15的程序

大家好,请教个很菜的问题,C语言写横竖斜相加都等于15的程序,就是如下:

4 9 2

3 5 7

8 1 6

我是定义一个二维数组a[3][3],然后一个一个去计算统计横竖斜是否为15,都符合就printf,不符合就互换值,然后重新去统计,一切我都考虑清楚了,就是不知道怎么互换值,不是仅仅一个

int temp;

temp=a;

a=b;

b=temp;

就解决了,而且怎么记得住不会走重复的路呢?

纠结中,求解,谢谢。

给个大概的提示就行,如果有互换和防止走重复的路的片段代码也行,谢谢。

不要长篇大论。

c

语言

------解决方案--------------------

找个全排列的算法就好了,按顺序遍历,符合条件就输出

------解决方案--------------------

http://mengliao.blog.51cto.com/876134/824079,自己选一个把,这种代码很多。。。或者你自己搜全排列

------解决方案--------------------

其实三维数组你也可以当做一位数组来看咯

把条件分析处理好例如:

a1 a2 a3

a4 a5 a6

a7 a8 a9

然后通过吧a1-a9全排列的算法 在最里面判断:

a1+a5+a9 == a2+a3+a7 ==a2+a5+a9 == a4+a5+a6 == 15满足就打印出来呗

------解决方案--------------------

全排列供参考#include 

#include 

#include 

int m;//记录字符串长度

int n;//记录字符串中的字符种类数

char map[256];//记录是哪几种字符

int count[256];//记录每种字符有多少个

int stack[1000];//递归用的栈,并记录当前生成的排列

void Make_Map(char *str) {//统计字符串的相关信息

int s[256];

int i;

memset(s,0,sizeof(s));

memset(count,0,sizeof(count));

m=strlen(str);

while(*str) {

s[*str]++;

str++;

}

n=0;

for (i=0;i<256;i++)

if (s[i]) {

map[n]=i;

count[n]=s[i];

n++;

}

}

void Find(int depth) {//递归式回溯法生成全排列

if (depth==m) {

int i;

for (i=0;i

putchar('\n');

} else {

int i;

for (i=0;i

if (count[i]) {

stack[depth]=i;

count[i]--;

Find(depth+1);

count[i]++;

}

}

}

void main(int argc,char**argv) {

if (argc<2) {

printf("%s 要产生全排列的字符串\n",argv[0]);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值