展开全部
当年我们做大程的时候本来也想做数独来着,后来时间不够没做成.不知道专业人士怎么编的,只能提供一点当时的思路给你,
1.9*9个格子对应一个数组A,数组的第一个值从0到9表示其中填的数字,0就是不填,另一个值表示它在桌面上的位置就是坐标
2.需要10张图片,空白和9个数字
3.通过对鼠标点击的反应改变格子数组A的值,且将相应图片覆盖在相应坐标上
4.事先输入若干组数组A的值(每组81个数),作为题库
5.进行游戏时随机抽取题库中的一组,再随机抽取若干格子显示出来,其他留白.
6.填完后用三个循环判断下每行每列每块是否有相同的数字,没有则通过.
具体编按钮、放图、鼠标点击响应等各种问题查一下书,有很多书上有很多教的这种一小段一小段的程序源代码,直接抄下就行了。
加油^^
1.9*9个格子对应一个数组A,数组的第一个值从0到9表示其中填的数字,0就是不填,另一个值表示它在桌面上的位置就是坐标
2.需要10张图片,空白和9个数字
3.通过对鼠标点击的反应改变格子数组A的值,且将相应图片覆盖在相应坐标上
4.事先输入若干组数组A的值(每组81个数),作为题库
5.进行游戏时随机抽取题库中的一组,再随机抽取若干格子显示出来,其他留白.
6.填完后用三个循环判断下每行每列每块是否有相同的数字,没有则通过.
具体编按钮、放图、鼠标点击响应等各种问题查一下书,有很多书上有很多教的这种一小段一小段的程序源代码,直接抄下就行了。
加油^^
展开全部
main()
{
int i,j,m;
scanf("%d",&m)
for(i=0;i<m;i++)
{
for(j=0;j<m;i++)
printf("%d ",(i+j)%m+1);
printf("\n");
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个我会,wait
#include "stdafx.h"
#include <iostream>
using namespace std ;
void printCube(int** arr2D , int len);
int _tmain(int argc, _TCHAR* argv[])
{
int m ;
cin >> m ;
int** cube ;
cube = new int*[m] ;
for(int i = 0 ; i < m ; ++i)
{
cube[i] = new int[m] ;
}
for(int k = 0 ; k < m ; ++k)
{
for(int n = 0 ; n < m ; ++n)
{
cube[k][n] = (k+n)%m + 1 ;
}
}
printCube(cube , m);
for(int j = 0 ; j < m ; ++j)
{
delete[] cube[j] ;
}
delete[] cube ;
system("pause");
return 0;
}
void printCube(int** arr2D , int len)
{
for(int k = 0 ; k < len ; ++k)
{
for(int n = 0 ; n < len ; ++n)
{
cout << arr2D[k][n] << " " ;
}
cout << endl ;
}
}
能得到任意一个元素
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个挺简单,用一个数组,把输入的数从1到m存储,循环打印,接着循环位移即可
位移子函数
void yidong(int *a,int n)
{
int i,t;
t=a[0];
for(i=0;i<n-2;i++)
a[i]=a[i+1];
a[n-1]=t;
}
主函数
int m,i,j,x[1000];
scanf("%d",&m);
for(i=0;i<m;i++)
x[i]=i+1;
for(i=0;i<m;i++)
{
for(i=0;i<m;i++)
printf("%3d",x[i]);
yidong(x,m);
}
位移子函数
void yidong(int *a,int n)
{
int i,t;
t=a[0];
for(i=0;i<n-2;i++)
a[i]=a[i+1];
a[n-1]=t;
}
主函数
int m,i,j,x[1000];
scanf("%d",&m);
for(i=0;i<m;i++)
x[i]=i+1;
for(i=0;i<m;i++)
{
for(i=0;i<m;i++)
printf("%3d",x[i]);
yidong(x,m);
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
/*数字0表示该位置为空,待填入数字
{0,0,4,6,0,2,0,9,1},
{2,1,0,9,8,4,0,5,6},
{9,0,0,0,7,1,4,2,0},
{1,2,5,0,6,0,3,4,7},
{4,7,6,0,0,0,9,8,5},
{8,3,9,0,4,0,1,6,2},
{0,9,1,2,5,0,0,0,4},
{5,8,0,4,1,6,0,3,9},
{6,4,0,3,0,7,5,0,0}};
*/
int data[9][9] = {
{0,7,0,2,6,0,9,0,0},
{3,0,0,0,0,8,0,0,7},
{0,9,0,0,5,7,0,0,0},
{5,0,0,0,0,0,0,7,0},
{0,4,7,3,1,2,8,5,0},
{0,8,0,0,0,0,0,0,1},
{0,0,0,8,2,0,0,4,0},
{7,0,0,6,0,0,0,0,2},
{0,0,4,0,3,9,0,8,0}};
void input()
{
int i,j;
for(i = 0;i < 9;i++)
for(j = 0;j < 9;j++)
scanf("%d",&data[i][j]);
}
void output()
{
int i,j;
for(i = 0;i < 9;i++)
{
for(j = 0;j < 9;j++)
printf("%d ",data[i][j]);
printf("\n");
}
printf("\n");
}
/*检查num是否可放置在3*3区域是否有冲突*/
int CheckSquare(int line,int col,int num)
{
int i = (line / 3) * 3;
int j = (col / 3) * 3;
int m,n;
for(m = i;m < i + 3;m++)
for(n = j;n < j + 3;n++)
if((data[m][n] == num) && !(m == line && n == col))
return 0;
return 1;
}
/*检查行冲突*/
int CheckLine(int line,int col,int num)
{
int i = 9;
while(i--)
if((data[line][i] == num) && (i != col))
return 0;
return 1;
}
/*检查列冲突*/
int CheckColumn(int line,int col,int num)
{
int i = 9;
while(i--)
if((data[i][col] == num) && (i != line))
return 0;
return 1;
}
/*检查i行j列是否可放置num*/
int Check(int i,int j,int num)
{
return CheckSquare(i,j,num) && CheckLine(i,j,num) && CheckColumn(i,j,num);
}
/*检查是否完成*/
int IsDone()
{
int i,j;
for(i = 0;i < 9;i++)
for(j = 0;j < 9;j++)
if(!Check(i,j,data[i][j]) || (data[i][j] == 0))
return 0;
return 1;
}
void Calc()
{
int i,j,x;
if(IsDone())
{
output();
return;
}
for(i = 0;i < 9;i++)
{
for(j = 0;j < 9;j++)
{
if(data[i][j] == 0)
{
for(x = 1; x <= 9;x++)
{
if(Check(i,j,x))
{
data[i][j] = x;
Calc();
}
}
if(x == 10)
{
data[i][j] = 0;
return ;
}
}
}
}
}
int main()
{
// input();
Calc();
output();
return 0;
}
/*数字0表示该位置为空,待填入数字
{0,0,4,6,0,2,0,9,1},
{2,1,0,9,8,4,0,5,6},
{9,0,0,0,7,1,4,2,0},
{1,2,5,0,6,0,3,4,7},
{4,7,6,0,0,0,9,8,5},
{8,3,9,0,4,0,1,6,2},
{0,9,1,2,5,0,0,0,4},
{5,8,0,4,1,6,0,3,9},
{6,4,0,3,0,7,5,0,0}};
*/
int data[9][9] = {
{0,7,0,2,6,0,9,0,0},
{3,0,0,0,0,8,0,0,7},
{0,9,0,0,5,7,0,0,0},
{5,0,0,0,0,0,0,7,0},
{0,4,7,3,1,2,8,5,0},
{0,8,0,0,0,0,0,0,1},
{0,0,0,8,2,0,0,4,0},
{7,0,0,6,0,0,0,0,2},
{0,0,4,0,3,9,0,8,0}};
void input()
{
int i,j;
for(i = 0;i < 9;i++)
for(j = 0;j < 9;j++)
scanf("%d",&data[i][j]);
}
void output()
{
int i,j;
for(i = 0;i < 9;i++)
{
for(j = 0;j < 9;j++)
printf("%d ",data[i][j]);
printf("\n");
}
printf("\n");
}
/*检查num是否可放置在3*3区域是否有冲突*/
int CheckSquare(int line,int col,int num)
{
int i = (line / 3) * 3;
int j = (col / 3) * 3;
int m,n;
for(m = i;m < i + 3;m++)
for(n = j;n < j + 3;n++)
if((data[m][n] == num) && !(m == line && n == col))
return 0;
return 1;
}
/*检查行冲突*/
int CheckLine(int line,int col,int num)
{
int i = 9;
while(i--)
if((data[line][i] == num) && (i != col))
return 0;
return 1;
}
/*检查列冲突*/
int CheckColumn(int line,int col,int num)
{
int i = 9;
while(i--)
if((data[i][col] == num) && (i != line))
return 0;
return 1;
}
/*检查i行j列是否可放置num*/
int Check(int i,int j,int num)
{
return CheckSquare(i,j,num) && CheckLine(i,j,num) && CheckColumn(i,j,num);
}
/*检查是否完成*/
int IsDone()
{
int i,j;
for(i = 0;i < 9;i++)
for(j = 0;j < 9;j++)
if(!Check(i,j,data[i][j]) || (data[i][j] == 0))
return 0;
return 1;
}
void Calc()
{
int i,j,x;
if(IsDone())
{
output();
return;
}
for(i = 0;i < 9;i++)
{
for(j = 0;j < 9;j++)
{
if(data[i][j] == 0)
{
for(x = 1; x <= 9;x++)
{
if(Check(i,j,x))
{
data[i][j] = x;
Calc();
}
}
if(x == 10)
{
data[i][j] = 0;
return ;
}
}
}
}
}
int main()
{
// input();
Calc();
output();
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询