为什么把t+1换成t++就不行了
#include<stdio.h>
#include<math.h>
static int count =0,int X[8];
int Place(int t);
void Show();
void BackTrack(int t);
int Place(int t)
{
int k;
for( k = 0; k < t; k++)
{
if( X[k] == X[t] || abs(t - k) == abs(X[t] - X[k]) )
return 0;
}
return 1;
}
void Show()
{
count++;
printf("第%d种摆法: \n",count);
int i,j;
for( i = 0; i < 8; i++)
{
for(j = 0; j < 8; j++)
if(X[i] == j) printf("Q ");
else printf("* ");
printf("\n");
}
}
void BackTrack(int t)
{
if(t == 8) Show();
else
{
int i;
for( i = 0; i < 8; i++)
{
X[t] = i;
if(Place(t))
BackTrack(t+1);
}
}
}
void main()
{
BackTrack(0);
}
[解决办法]
这个和你程序的逻辑有关.
void BackTrack(int t){ if(t == 8) Show(); else { int i; for( i = 0; i < 8; i++) { X[t] = i; if(Place(t)) BackTrack(t+1); } }}
[解决办法]
你用++t当循环一次后,t的值就改变了,而用t+1,t的值不会变
[解决办法]
16楼正解,t+1给函数传递的是t+1的结果,t的值不变。t++给函数传递的是t,然后t的值+1。++t给函数传递的是t+1,t的值+1
[解决办法]
t的值不能变。
你用++t当循环一次后,t的值就改变了,而用t+1,t的值不会变
[解决办法]
1) C里面好多问题是不好理解的,要寻找解决,对自己的代码有把握;
2) 比如优先级用括号来解决, ++i或i++ 用变量替换,如a = i + 1 (i++)或a = i; i++ (++i),这是比较笨的方法,但是很有用。类似的问题在C里是很多的,LZ可以总结出自己的方法。
3)优良的代码总是让人很好理解,难以理解的代码会失去维护的价值。