| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 885 人关注过本帖
标题:新手求教,程序编不起来,运行不了,为什么??
只看楼主 加入收藏
hzy_
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-8-3
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
新手求教,程序编不起来,运行不了,为什么??
#include<stdio.h>
void ssprintf (int abc[9][9]);
int check1(int abc[9][9]);
void pojie(int abc[9][9]);
int check2(int a[9]);
int fun2(int* pzu ,int abc[9][9],int i);
int abc[9][9];
int main(void)
{
char d;
int a,b,c;
 for(int e=1;e<=81;e++)
{ssprintf(abc);

printf("选行数");
scanf("%d",&a);
 printf("选列数");
scanf("%d",&b);
printf("输入数值");
scanf("%d",&c);
abc[a][b]=c;
if(check1(abc)!=0)
{printf ("输入有误,请重新输入全部");
 }
printf("继续吗?继续请按Y,否则开始破解");
scanf("%c",&d);
if(!(d=='y'||d=='Y'))
break;}
ssprintf(abc);
pojie(abc);
return 0;}
void ssprintf(int abc[9][9])
{
for(int a=0;a<=8;a++)
{printf(" - - - - - - - - - ");
for(int b=0 ;b<=8;b++)
printf("|%d",abc[a][b]);}
printf(" - - - - - - - - - ");
}
int check1(int abc[9][9])
{ int h=0;
  
  int ab[9];
  for(int e=0;e<=8;e++)
  {for(int f=0;f<=8;f++)
  ab[f]=abc[e][f];}
  h+=check2(ab);
  for(int e=0;e<=8;e++)
  {for(int f=0;f<=8;f++)
  ab[f]=abc[f][e];}
  h+=check2(ab[9]);
  for(int i=0;i<=6;i+=3)
  {for(int j=0;j<=6;j+=3)
   ab[0]=abc[i][j];ab[1]=abc[i][j+1];ab[2]=abc[i][j+2];
      ab[3]= abc[i+1][j];ab[4]=abc[i+1][j+1];ab[5]=abc[i+1][j+2];
       ab[6]=abc[i+2][j];ab[7]=abc[i+2][j+1];ab[8]=abc[i+2][j+2];
   h+=check2(ab);}
   return h;}
int check2(int a[9])
{int h=0;
 for(int i=0;i<=8;i++)
{for(int j=0;j<=8;j++)
 if(i==j)
 continue;
 if(a[i]==a[j]&&a[i]!=0)
 h+=1;}
 return h;}
void pojie(int abc[9][9])
{
int i=0;
int* pzu[81];
 for(int a=0;a<=80;a++)
 {if(abc[a]==0)
  pzu[i]=abc[a];
  i+=1;}
for(int j=0;j<=(i-1);j++)
 *pzu[j]=1;
fun2(*pzu,abc[9][9],i);}
int fun2(int *pzu,int abc,int i)
{
for(int j=0;j<=9;j++)
 {
 pzu[i-1]=j;
  i-=1;
  if(check1(abc)!=0)
  ssprintf(abc);
  if(i>=0)
  fun2( pzu[i],abc,i);}
 return 0;}



编了个解数独的,却编不起来。。。。求指教。。。。[local]1[/local]
搜索更多相关主题的帖子: include 
2016-08-03 22:00
网络小白
Rank: 2
等 级:论坛游民
帖 子:26
专家分:35
注 册:2014-9-13
收藏
得分:20 
#include<stdio.h>
void ssprintf(int abc[9][9]);
int check1(int abc[9][9]);
void pojie(int abc[9][9]);
int check2(int a[9]);
int fun2(int* pzu, int abc[9][9], int i);
int abc[9][9];
int main(void)
{
    char d;
    int a, b, c;
    for (int e = 1;e <= 81;e++)
    {
        ssprintf(abc);

        printf("选行数");
        scanf("%d", &a);
        printf("选列数");
        scanf("%d", &b);
        printf("输入数值");
        scanf("%d", &c);
        abc[a][b] = c;
        if (check1(abc) != 0)
        {
            printf("输入有误,请重新输入全部");
        }
        printf("继续吗?继续请按Y,否则开始破解");
        scanf("%c", &d,1);
        if (!(d == 'y' || d == 'Y'))
            break;
    }
    ssprintf(abc);
    pojie(abc);
    return 0;
}
void ssprintf(int abc[9][9])
{
    for (int a = 0;a <= 8;a++)
    {
        printf(" - - - - - - - - - \n");
        for (int b = 0;b <= 8;b++)
            printf("|%d", abc[a][b]);
    }
    printf(" - - - - - - - - - \n");
}
int check1(int abc[9][9])
{
    int h = 0;

    int ab[9];
    for (int e = 0;e <= 8;e++)
    {
        for (int f = 0;f <= 8;f++)
            ab[f] = abc[e][f];
    }
    h += check2(ab);
    for (int e = 0;e <= 8;e++)
    {
        for (int f = 0;f <= 8;f++)
            ab[f] = abc[f][e];
    }
    h += check2(&ab[9]);  //加个&
    for (int i = 0;i <= 6;i += 3)
    {
        for (int j = 0;j <= 6;j += 3)
        {   //少括号
            ab[0] = abc[i][j];ab[1] = abc[i][j + 1];ab[2] = abc[i][j + 2];
            ab[3] = abc[i + 1][j];ab[4] = abc[i + 1][j + 1];ab[5] = abc[i + 1][j + 2];
            ab[6] = abc[i + 2][j];ab[7] = abc[i + 2][j + 1];ab[8] = abc[i + 2][j + 2];
            h += check2(ab);
        }
    }
    return h;
}
int check2(int a[9])
{
    int h = 0;
    for (int i = 0;i <= 8;i++)
    {
        for (int j = 0;j <= 8;j++)
        {  //加大括号
            if (i == j)
                continue;
            if (a[i] == a[j] && a[i] != 0)
                h += 1;
        }
    }
    return h;
}
void pojie(int abc[9][9])
{
    int i = 0;
    int* pzu[81];
    for (int a = 0;a <= 80;a++)
    {
        if (abc[a] == 0)
            pzu[i] = abc[a];
        i += 1;
    }
    for (int j = 0;j <= (i - 1);j++)
    {//需要大括号

        *pzu[j] = 1;              //这个位置有错误
        fun2(*pzu, &abc[9], i);  //应该是这么传递二维数组,而且我感觉abc[9]应该不对
    }
}
int fun2(int *pzu, int abc[9][9], int i)//abc形参定义错了应该是二维数组。
{
    for (int j = 0;j <= 9;j++)
    {
        pzu[i - 1] = j;
        i -= 1;
        if (check1(abc) != 0)
            ssprintf(abc);
        if (i >= 0)
            fun2(&pzu[i], abc, i);  //pzu[]前面加取地址符号
    }
    return 0;
}
我向知道这代码你是在哪抄的。坑啊
这编码风格真是另类啊。该加大括号得加大括号啊。其中有个二层for循环那里没加大括号还写了那么多语句,不加括号怎么可以用上一层的i和本层的j。其它地方我看着也不是很对所以就都给你加了大括号。。而且函数的参数传递我也是醉了。。。fun2的第二个形参原型写的是二维数组。函数体写的是整形变量。。。。没时间研究具体细节。所以在pojie函数里面*pzu[j] = 1;              //这个位置有错误
        fun2(*pzu, &abc[9], i);  //应该是这么传递二维数组,而且我感觉abc[9]应该不对          这两个位置没看懂。。如果是你自己写的在好好看看。。。。
2016-08-04 08:48
快速回复:新手求教,程序编不起来,运行不了,为什么??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030597 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved