C++的难题啊

来源:百度知道 编辑:UC知道 时间:2024/06/14 02:41:12
有9个空格填入1~9(不能重复)要使得横竖和对角线的数之和都等于15~~~

我编的:
#include "iostream"
using namespace std;
int main()
{
int a[3][3],n,h,f;
for(a[0][0]=1;a[0][0]<10;a[0][0]++)
for(a[0][1]=1;a[0][1]<10;a[0][1]++)
for(a[0][2]=1;a[0][2]<10;a[0][2]++)
if(a[0][0]+a[0][1]+a[0][2]==15)
{
for(a[1][0]=1;a[1][0]<10;a[1][0]++)
for(a[1][1]=1;a[1][1]<10;a[1][1]++)
for(a[1][2]=1;a[1][2]<10;a[1][2]++)
if(a[1][0]+a[1][3]+a[1][2]==15)
{
for(a[2][0]=1;a[2][0]<10;a[2][0]++)
for(a[2][1]=1;a[2][1]<10;a[2][1]++)
for(a[2][2]=1;a[2][2]<10;a[2][2]++)
if(a[2][0]+a[2][1]+a[2][2]==15)
{
for(h=0,f=0;h<3;h++)
if(h==2)f+=1;
cout<<a[f][h];
}
}
}
return 0;
}

为什么它会显示不

你的for太多了,不知道为什么没有输出,我试着把后面两组for去掉,结果有输出了,哈哈 难道和for的多少好有关系。而且你的算法不对,之判断了各行相等。下面给你个正确的程序,不是我编的,^_^
#include <stdio.h>
#include<iostream.h>
main()
{
int flag[10]={0,0,0,0,0,0,0,0,0,0},i,j,k;
int count = 0;
for (i=1; i<10; i++)
{
flag[i] = 1;
for (j=1; j<10; j++)
{
if (flag[j] != 1)
{
flag[j] = 1;
if ((15-i-j)>0 && (15-i-j)<10 && flag[15-i-j]!=1)
{
flag[15-i-j] = 1;
for (k=1; k<10; k++){
if (flag[k]!=1){
flag[k] = 1;
if ((15-i-k)>0 && (15-i-k)<10 && flag[15-i-k]!=1){
flag[15-i-k] = 1;
if ((2*i+j+k-15)>0 && (2*i+j+k-15)<10 && flag[2*i+j+k-15]!=1)
{
flag[2*i+j+k-15] = 1;
if ((30-2*i-2*j-k)>0 && (30-2*i-2*j-k)<10 && flag[30-2*i-2*j-k]!=1)
{
flag[30-2*i-2*j-k] = 1;
if((30-2*i-j-2*k)>0 && (30-2*i-j-2*k)<10 && flag[30-2*i-j-2*k]!=1)
{
flag[30-2*i-j-2*k] = 1;
if((30-3*i-j-k)>0 && (30