方格填数如下的10个格子填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。#include <stdio.h>#include <iostream>using namespace std;int number=0;bool b[10];int a[3][4];void pd(){ bool HH=1; for(int i=0;i<3;i++) { for(int j=0;j<3;i++) if( !( (a[i][j]-a[i][j+1]!=1) && (a[i][j]-a[i][j+1]!=-1) ) )HH=0; } for(int i=0;i<3;i++) //判断是否上下,上下斜方向临近 { for(int j=i-1;j<=i+1;j++) { if( !( (j<=3) &&(j>=0) && ((a[1][i]-a[0][j])!=1) && ((a[1][i]-a[0][j])!=-1) ))HH=0; if( !( (j<=3) &&(j>=0) && ((a[1][i]-a[2][j])!=1) && ((a[1][i]-a[2][j])!=-1) ))HH=0; } } if(HH)number++; printf("number");}void fuzhi(int c[],int enter){ if(enter==10) { for(int i=0;i<=2;i++) //将C【12】的值给A【3】【4】; { for(int j=0;j<=3;j++) { if(i+j==0||i*4+j==11)a[i][j]=999; else a[i][j]=c[i*4+j]; } } pd(); return; } for(int i=0;i<=9;i++) { if(!( b[i])){ c[enter]=i; b[i]=1; fuzhi(c,enter+1); } b[i]=0; } }int main(){ int c[10]; fuzhi(c,0); cout<<number<<endl<<"123"<<endl;// printf("1!" );// printf("%d!",number); return 0;}
代码有点乱,不太看得清思路,里面有一些数组越界访问的情况,算法是否有效未知,重写了一个供参考。
思路如下:
这个问题实际上是生成0~9的全排列,然后根据每个数在格子里的位置判断每个排列是否符合要求。百度了一个全排列算法稍做修改,得到以下代码,输出的有效方案数是1580,在我这里输出大约在70ms到100ms左右。百度这个代码排版垃圾得无以复加,vs里面排得好好复制过来全乱,不再重排了。
另外,生成排列数以后,这个格子问题其实应该能转化为纯数学算法来判断,不需要真的填什么表的,我懒得想太多,填表和判断部分的代码有点玩的性质。
#include <stdio.h>求C语言编程大佬帮忙!这道题的逻辑哪里出错了!找了几个小时了没搞明白...
思路如下:这个问题实际上是生成0~9的全排列,然后根据每个数在格子里的位置判断每个排列是否符合要求。百度了一个全排列算法稍做修改,得到以下代码,输出的有效方案数是1580,在我这里输出大约在70ms到100ms左右。百度这个代码排版垃圾得无以复加,vs里面排得好好复制过来全乱,不再重排了。另外,生成...
c语言简单程序题把我搞糊涂了 求大佬解疑
第一张图片:根据优先级,先算++,但由于加加在后面,所以返回加加前的值,也就是7。再算等号,赋值给sum,此时sum就是7。然后轮到逗号,逗号之后是sum自加,得8。然后再到下一个num自加,但跟sum已经没有关系了。所以答案是8。第二张图片:由于括号的原因,等号优先级低,所以先算括号里的值。
请问一下大佬们,这道C语言编程题我为什么错,还有这些监测点的划分依据是...
这段代码的问题在于图中红色框内jc数据类型不合适,不能定义为int,需为double。解释:C语言中一般int为32位,最大只能表示12的阶乘,超过12就会产生溢出,而题目中明确说明了数据会在double范围内,就是有可能超过int所表示范围。需要改为double类型。监测点划分依据:Cmn表示从n中选m个有多少情况,通...
C语言循环的嵌套,我输出的和老师的不一样,求大佬解惑,我找了好几天了...
1)x = 2; 不然1都判断成了素数。另外,判断素数那里效率太低,你找个求素数代码比较一下。比如素数11,当判断到4仍未找到约数,就不需要找下去了 2)x++的位置应放于if (isPrime == 1)判断之后。
C语言求助,哪位大佬帮我看看这道题?一直搞不清楚
知道答主 回答量:133 采纳率:0% 帮助的人:5.2万 我也去答题访问个人页 关注 展开全部 这是一道C语言的增删改查的链表操作操作的典型题目,同时考察对结构体的理解程度。最简单的就是使用顺序链表做。 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 ...
c语言编程。求大佬指教。。 这个哪里错了。应该怎么改? 为什么一直说f...
提示的错误是函数没有定义,在你的main()函数里面用到了fork()函数,但是你并没有定义它,所以编译器就不知道这个fork是个什么东西。你可以在下面定义一下这个函数。
c语言未经处理的异常,求大佬指点
您好,很高兴回答您的问题。您的这个题目,系统已经很明显告诉您了错误的原因。因为您定义的x为字符型数据,那么它对应的输入输出格式符为%c,但是您在输入语句中写的是%s,是字符串格式,不符合字符型单个变量的输入输出。根据题目意思,应该是要输入字符串,那么定义的时候就要写成char x[2],因为存放的...
c语言求200以内的素数,大佬看看我这个哪里有错误 运行后什么都没有...
include <stdio.h> int main(){ int i,j,flag;printf("200以内的素数包括:\\n");for(i=2;i<=200;i++){ flag = 1;for(j=2;j
几道C语言的函数程序补全题,求大佬解答
请仔细看:首先看一下程序的逻辑(虽然貌似题主应该不是在这一块有问题:关于ascii码的解释:首先得知道每个字符和数值的对应关系(图不清晰可看戳这里:ascii编码对应表 好了,现在看程序中的第一个if语句,在用大于、小于这些镇绝悔运算比较符比较char的时候,会自动转换为整数比较,也就是说‘0’...
这个c语言题目有点难,求大佬帮忙
您说的这个问题,难点就在正确使用\/和%这两个符号。c语言中%只能使用在两个整数之间,且得到的结果也只能是整数,表示的是将前者除以后者后得到的余数,所以叫取余符号。\/表示除号,但是用在两个整数之间时,得到的结果也只能是整数。比如1\/2的结果是0,1%2的结果是1。根据以上说明,千位和各位应该...