请教个很菜的问题,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]);