例如,n = 4时方阵为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 上面的方阵中, 每次都是移动到不能填,不能填是指再走就出界,或者再走就到了之前填过的格子。 把所有格子初始化为0,方便之后判断。 实现 #include<stdio.h> #include<string.h> #define maxn 20 int a[maxn][maxn]; int main() { //tot表示现在填的个数
蛇形填数 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形。 例如n=4时方陈为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 输入直接输入方陈的维数,即n的值。(n<=100)输出输出结果是蛇形方陈。
样例输入: 4 样例输出: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 #include <stdio.h> #include <stdlib.h
例如,n=4时的方阵为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 #include<stdio.h> #include<string.h
#include<iostream> #include<cstring> using namespace std; int arr_num[10][2]; int count=0; int judge( j<4;j++){ cout<<arr[i][j]<<" "; } cout<<endl; } count++; return; } for(int i=0;i<10 } arr_num[i][1]=0; arr[x][y]=-5; } } } } int main(){ int arr[3][4]; for(int i=0;i<10
引 入 ---- 蛇形填数,一道经典有趣的算法入门题。这里用python来实现。 代码 vim snake.py ---- #! in range(rows): for j in range(cols): matrix[i][j] return matrix #构造蛇形填数函数 , number) i = j = 0 total = matrix[i][j] = 1 while(total < number * number): #向右填数 + 1] == 0): total += 1 j += 1 matrix[i][j] = total #向下填数 1][j] == 0): total += 1 i += 1 matrix[i][j] = total #向左填数
蛇形填数 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述在n*n方陈里填入1,2,...,n*n,要求填成蛇形。 例如n=4时方陈为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 输入直接输入方陈的维数,即n的值。(n<=100)输出输出结果是蛇形方陈。 ("%d",&n); 6 int m=1,i=-1,j=n-1; 7 int snack[101][101]={0}; 8 while(m<=n*n) 9 { 10
答案:10 3 9 8 思路 如图: 新建数组用于存放未知数字,红色为下表编号 通过全排列将1-14未使用的依次放入数组中 判断是否满足七边之和相等 代码 public static void main (String[] args) { // a[0]==6 &&a[8]==14&& a[9]==11 int[] num = { 1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13 for (int i = p; i <= q; i++) { swap(num, p, i); dfs(num, p + 1, q); swap(num, p, i); } } // 两数交换 ]); int sum6 = sum(a[10], a[7], a[5], a[3]); return sum == sum1 && sum1 == sum2 && sum2 == sum3 && sum3 == sum4 && sum4 == sum5 && sum5 == sum6; } // 返回四数之和 static int sum(int a, int b, int c, int d)
1 2 6 7 15 … 3 5 8 14 … 4 9 13 … 10 12 … 11 … … (1) 容易看出矩阵第二行第二列中的数是 5。请你计算矩阵中第 20 行第 20 列的数是多少? 解决方案 通过观察排列规律可以发现要寻找的数可以通过所在的行数,列数,斜排(右上—左下)以及该斜排最大的数之间存在的关系来求得。 具体解决方法如下:通过行数,列数求出该数在第几斜排,再求出该斜排最大的数,然后判断斜排奇偶性,若为奇,则答案为最大的数减去行数加一;若为偶,则答案为最大的数减去列数加一。 input())#第几行 b = int(input())#第几列 c = a+b-1#第几斜排 n = 0 for i in range(1, c+1): n += i#c斜排的最后一个数 = 0:#奇偶性 ans = n - a + 1#等于最大的数减行数加1 else: ans = n - b + 1#等于最大的数减列数加1 print(ans) 结语 解决了一道蓝桥杯一道填空题
标题:六角填数 如图【1.png】所示六角形中,填入1~12的数字。 使得每条直线上的数字之和都相同。 这里的可以先求出相等的数是多少,(1+2+3+……+12)*2/6 算到等于26; 然后用 回溯法 或者 暴力搜索法就可以了 回溯法 #include<iostream> # num[6]+num[7]+num[8]==26; default:return 1; } return 1; } int main() { int num[10 ]; for(int i = 0; i < 10; i++) { num[i] = 1; } int k = 0; while(k>=0) iostream> #include<algorithm> using namespace std; //全排列 int main1() { int num[9] = {2,4,5,6,7,9,10,11,12
继上一篇 回溯法解小学数字填数练习(1), 本文再补充2题。 题目一、每边三个数的和等于15 题目1描述: 把2、4、6、8、10、12、14这七个数填入下图的圆圈里, 使两个大圆圈上的四个数相加的和相等。 暴力法 此思路就是将2、4、6、8、10、12、14七个数,随机乱序,尝试填入。判断1、2、3三个节点和4、5、6三个节点的和一致即可。 10 8 4 2 6 14 第10次随机产生的结果: [12, 8, 4, 10, 14, 6, 2] 8 14 4 12 6 10 2 第 12 8 2 4 题目二、每边三个数的和等于15 题目1描述: 在图中填入数2-9,使得每边三个数的和等于15.
继上一篇《回溯法解小学数字填数练习(1)》,本文再补充2题。 题目一、填数使大圆圈上的数字相加相等题目1描述:把2、4、6、8、10、12、14这七个数填入下图的圆圈里,使两个大圆圈上的四个数相加的和相等。 暴力法此思路就是将2、4、6、8、10、12、14七个数,随机乱序,尝试填入。判断1、2、3三个节点和4、5、6三个节点的和一致即可。 10 6 12 4 2 8 找到结果 : [12, 14, 6, 2, 10, 8, 4] 14 10 6 12 8 2 4 题目二、每边三个数的和等于15题目 1描述:在图中填入数2-9,使得每边三个数的和等于15.回溯法以逆时针方向按顺序处理,如下图所示:图片图片执行结果如下找到结果 : [2, 6, 7, 5, 3, 8, 4, 9]2 9 46 87
,本文实例选择逆时针的方式 选择不同的数进行尝试 选择不同的数进行尝试,以保证边上的数值加起来为一个期望的值,如加起来为10,直到找到合适的解为止。 题目一、每条线上的三个数和为10 题目1描述: 把1、2、3、4、5、7这六个数填入下图的圆圈里, 每条线上的三个数的和都是10。 暴力法 一次随机产生10组结果。 次随机产生的结果: [5, 3, 2, 7, 1, 4] 5 3 4 2 7 1 一共随机[1059]次, 共产生满足条件结果[10]个 回溯法 找到结果 : [1, 4, 5, 3, 27 题目2描述: 在圆圈里填上不同的数,使每条边上的三个数和都是27。 20 题目3描述: 把1、2、3、4、5、6、7、8、9这九个数填入下图的圆圈里, 每条线上的三个数的和都是20。
周末,女儿让我辅导她一会数学作业,其中包含一个数字方阵题目,如下图所示;做这种题目,我们基本的思路如下:确定一个数占据起始点比如把1放入顶点,作为起始点确定一个方向(比如)比如选择逆时针或者顺时针,本文实例选择逆时针的方式选择不同的数进行尝试选择不同的数进行尝试 ,以保证边上的数值加起来为一个期望的值,如加起来为10,直到找到合适的解为止。 题目一、每条线上的三个数和为10题目1描述:把1、2、3、4、5、7这六个数填入下图的圆圈里,每条线上的三个数的和都是10。暴力法一次随机产生10组结果。 27题目2描述:在圆圈里填上不同的数,使每条边上的三个数和都是27。 20题目3描述:把1、2、3、4、5、6、7、8、9这九个数填入下图的圆圈里,每条线上的三个数的和都是20。
例如: 1×2+9×7=13×5 10×8+12×3=11×4 只要有任意一个方块代表的数字不同,就算两种不同的方案。 请你计算,一共有多少种不同的方案。 { return 0; } } if(k == 12) { if(num[7]*num[8]-num[9]*num[10
本贴 包括,蛇行矩阵 蛇形填数 回形取数 等 蛇行系类(C语言详解) 问题 1097: 蛇行矩阵 时间限制: 样例输入 5 样例输出 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 提示 无 来源 无 思路:观察即可 这类题 主要是找规律 找找关联 如图 例如 n = 4 时方阵为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 输入 多组测试数据。 正题, 就是在执行下一步之前先预判一下当前你想到的下一个格子是否在方阵范围内是否有数已经填进去了。 只有 在方阵内 并且 格子里面没有被填过 则可以移动到格子里填数。 样例输入 3 3 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 8 9 6 3 2 5 解题思路: 和蛇形填数 类似 不过填变成取了, 不装南墙不变方向
当然,数据量不是很大的情况下,倒是可以选择升序排序,然后取最后的N项,但是数据量大之后,就会导致堆栈溢出问题
: s = set() In [128]: s Out[128]: set() In [129]: type(s) Out[129]: set In [101]: s.update(10 Traceback (most recent call l <ipython-input-101-c184888ad9c5> in <module>() ----> 1 s.update(10
折腾了两天总算搞定c调用jar包,其中遇到的问题这里总结一下: 1、起始demo 参考C调用java例子先跑起来 2、开发环境 使用linux虚拟机效率很低,找到了gnuwin32实现在windows下运行Makefile,使用的是https://sourceforge.net/projects/gnuwin32/ ,只需要把 mingw32-make.exe文件改名为make.exe 3、java开发 直接使用eclipse生成一个mvn项目,以这个最简项目开始入手 使用mvn编译出jar给c调用,参考maven将所有的依赖打成一个包,确保依赖没有问题,验证方法:
6、方格填数(结果填空) 如下的10个格子 +--+--+--+ | | | | +--+--+--+--+ | | | | | +--+--+--+--+ | | | | +--+--+--+ (左右、上下、对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 int i) { if (i == 11) { ++count; } else { for (int j = 0; j < 10 false; if (j == a[8] + 1 || j == a[8] - 1) return false; break; case 10