高应大一年级
|
分享:
▼
[quote] 下面是引用rei于2009-01-02 21:27发表的 : 目前是没有看到递回的部份... 给个小提示... 直的、横的、九宫格....有着同一个特性 他们都是要 检查9次....(包括本身那格) [attachment=466850] 另外另一个提示... 不知是否有学过『除法』... ------------ 恩阿 但是我就是写不出来怎去检查其他数字 ,再怎跑都是第一排而已.. 以下 我有多写 check_9X9 函式!!.....但是无用 除法 有学过一点点!!!! #include <iostream> #include <string> using namespace std; int AA[9][9]={ {2,0,0,0,0,0,0,6,0}, {4,0,6,7,8,0,0,0,0}, {9,0,0,2,0,0,0,5,7}, {0,0,0,0,0,0,0,8,9}, {0,5,0,0,0,0,0,1,0}, {1,8,0,0,0,0,0,0,0}, {3,9,0,0,0,4,0,0,6}, {0,0,0,0,6,8,2,0,1}, {0,1,0,0,0,0,0,0,0}, }; int check_9x9(int y,int x) //在阵列(y,x)的位置 { int a,b,count,y_start,x_start; count=0; y_start=(y/9)*9; x_start=(x/9)*9; //找出9X9的位置 for(a=y_start;a<y_start+3;a++) //a 从0~8 for(b=x_start;b<x_start+3;b++) { if (AA[y][x]==AA[a] ) count++; } if(count==1) return 1; //合法 else return 0; //不合法 } int check_column(int y,int x) //在阵列(y,x)的位置,一整列中是唯一 ? { int a,count; count=0; for(a=0;a<9;a++) //a 从0~8 { if (AA[y][x]==AA[y][a]) count++; } if(count==1) return 1; //合法 else return 0; //不合法 } int check_raw(int y,int x) //在阵列(y,x)的位置,一整行中是唯一 ? { int a,count; count=0; for(a=0;a<9;a++) //a 从0~8 { if (AA[y][x]==AA[a][x]) count++; } if(count==1) return 1; //合法 else return 0; //不合法 } int check_available(int y, int x) { if(!check_9x9(y,x)) return 0; //9x9失败 if(!check_raw(y,x)) return 0; //raw 失败 if(!check_column(y,x)) return 0; //column 失败 return 1; //成功 } void output() { int a,b; for(a=0;a<9;a++){ for(b=0;b<9;b++) cout<<AA[a]<<" "; cout<<endl; } } int main() { int temp,a,b; for(a=1;a<10;a++){ AA[0][0]=a; temp=check_available(0,0); if(temp) cout<<"AA[0][0]="<<AA[0][0]<<"此数字OK"<<endl; } output(); system("pause"); }
|
|
x0
[10 楼]
From:台湾固网股份有限公司 | Posted:2009-01-03 23:27 |
|
|
teldeanmac85
|
分享:
▲
▼
其实做法有很多 这个让你参考 请自行修改 因为最近没有太多时间 看你问了那么多天 作业也应该交出去了 刚刚中午休息匆忙的写一下 你可以试试看 check_func 和 check_func2 都可以用 只是作法上不一样而已 如果想写程式就继续坚持下去 加油~ 复制程式
#include <iostream>
#include <algorithm>
using namespace std;
#define FAIL 1
#define PASS 0
#define SUM 1+2+3+4+5+6+7+8+9
int check_func(int *buf)
{
int i;
sort(buf,buf+9);
for(i=0;i<9;i++){
if(*(buf+(i)) - (i+1) != 0){
return FAIL;
}
}
return PASS;
}
int check_func2(int *buf)
{
int i,buf_sum=0;
for(i=0;i<9;i++){
buf_sum += buf[i];
}
if(buf_sum - SUM != 0){return FAIL;}
return PASS;
}
int main(int argc, char* argv[])
{
int AA[9][9]={
{1,2,3,4,5,6,7,8,9},
{2,1,2,3,4,5,6,7,8},
{3,9,1,2,3,4,5,6,7},
{4,8,9,1,2,3,4,5,6},
{5,7,8,9,1,2,3,4,5},
{6,6,7,8,9,1,2,3,4},
{7,5,6,7,8,9,1,2,3},
{8,4,5,6,7,8,9,1,2},
{9,3,4,5,6,7,8,9,1},
};
int row_buf[9] = {0};
int col_buf[9] = {0};
int n_buf[9] = {0};
int x=0,y=0,sx=0,sy=0,i=0,j=0,n=0;
for(x=0; x<9; x++){
for(y=0; y<9; y++){
row_buf[y] = AA[x][y] ;
col_buf[y] = AA[y][x] ;
}
if(check_func(row_buf)){cout<<"FAIL"<<endl;exit(0);}
if(check_func(col_buf)){cout<<"FAIL"<<endl;exit(0);}
}
for(i=0;i<9;i=i+3){
for(j=0;j<9;j=j+3){
n = 0;
for(x=0;x<3;x++){
for(y=0;y<3;y++){
n_buf[n] = AA[x+i][y+j];
n++;
}
}
if(check_func(n_buf)){cout<<"FAIL"<<endl;exit(0);}
}
}
return 0;
}
此文章被评分,最近评分记录财富:50 (by 三仙) | 理由: 因为您的参与,让程式设计更容易!! | |
|
|
|
|
x0
[13 楼]
From:台湾 | Posted:2009-01-06 12:37 |
|
|
rei
|
分享:
▲
▼
下面是引用高应大一年级于2009-01-06 13:52发表的 : for ( a=0;a<80;a++ ){ cout<<a<<"/9="<< a/9<<endl; cout<<a<<"%9="<<a%9<<endl; }
我只知道用FOR 回圈去写而已
但是之后 我就不懂了 我讲得那个部份...主要是要看『算出来的答案跟计算过程的关系』... 程式的部份并非重点... 我想你应该知道 『/』是除法 求出来的值则是为『商数』... 『%』也是一种除法 不过求出来的值则是『余数』... 配合上该图片 这图片,跟请你计算的部份~ 我们都知道,数读他一共有81格!!! 其中会有某几格会先给我们数值!!! 利用这个特性,将递回的部份来深入求取 如果刚好从AA[0][0]来开始看!!! 将0利用上两个数学式来算 0/9 = 0 0%9 = 0 便可以知道0在座标AA[0][0]的位址....= =+ 在递回中加个for来放值~判断是否合理!! 合理则往内切入一格~ 不合理则退回至前一格!!! 如果很顺利的切入第81格了话~ 恭喜!!! 你已经求出答案了!!! 把他列印出来就完成了!!! 以上XD
|
人生要是跟等巴士一样... 你愿意搭哪一种车? 爆满?脏车?旧车?新车?空车?还是...走路?
|
x0
[17 楼]
From:台湾 | Posted:2009-01-06 23:43 |
|
|
|