题目
圆溜溜的奶黄包
这个作者很懒,什么都没留下…
展开
-
【贪心算法】田忌赛马问题代码和注释
描述 田忌与齐王赛马,双方各有n匹马参赛(n<=100),每场比赛赌注为1两黄金,现已知齐王与田忌的每匹马的速度,并且齐王肯定是按马的速度从快到慢出场,现要你写一个程序帮助田忌计算他最好的结果是赢多少两黄金(输用负数表示)。 Tian Ji and the king play horse racing, both sides have n horse (n is no more the原创 2017-12-03 17:15:53 · 7188 阅读 · 1 评论 -
回溯算法的应用:C语言中的堡垒问题(不要把换行符输到数组里QAQ)
描述 城堡是一个4×4的方格,为了保卫城堡,现需要在某些格子里修建一些堡垒。城堡中的某些格子是墙,其余格子都是空格,堡垒只能建在空格里,每个堡垒都可以向上下左右四个方向射击,如果两个堡垒在同一行或同一列,且中间没有墙相隔,则两个堡垒都会把对方打掉。问对于给定的一种状态,最多能够修建几个堡垒。 输入 每个测例以一个整数n(1<=n<=4)开始,表示城堡的大小。接下来是n行字符每行n个原创 2017-11-03 16:52:47 · 871 阅读 · 0 评论 -
C语言中的数独问题(回溯)
描述: 数独游戏规则 在9阶方阵中,包含了81个小格(九列九行),其中又再分成九个小正方形(称为宫),每宫有九小格。 游戏刚开始时,盘面上有些小格已经填了数字(称为初盘),游戏者要在空白的小格中填入1到9的数字, 使得最后每行、每列、每宫都不出现重复的数字,而且每一个游戏都只有一个唯一的解答(称为终盘)。 输入: 一个9*9的矩阵,0表示该位置是空白。原创 2017-11-02 23:27:29 · 3410 阅读 · 6 评论 -
C语言中用队列和广搜解决六数码问题。
描述 现有一两行三列的表格如下: A B C D E F 把1、2、3、4、5、6六个数字分别填入A、B、C、D、E、F格子中,每个格子一个数字且各不相同。每种不同的填法称为一种布局。如下: 1 3 5 2 4 6 布局1 2 5 6 4 3 1 布局2 定义α变换如下:把A格中的数字放入B格,把B格中的数字放入E格,把E格中的数字放原创 2017-11-10 18:27:46 · 841 阅读 · 0 评论 -
如何能让“回文质数”不超时?剪枝算法?回文质数问题答案及注释。
优化“回文质数“程序的思维过程回文质数问题的答案及注释剪枝算法原创 2017-10-16 14:16:56 · 1511 阅读 · 1 评论 -
关于穷举、深搜、广搜的思考。
判断是使用深搜还是广搜,我觉得主要有三个条件? 1.能不能通过穷举列出所有情况从而解决问题。 2.能不能通过判断中间结点的情况来否定这个分支的下的所有情况。 3.如果以上两个条件都不符合,那是不是要求最短或最小的情况?如果符合第一个条件,可以使用最原始的深搜解决问题。最原始的深搜其实就是递归调用函数,本质上就是一种穷举,是从起点先一次性探到终点再从终点往回讨论其他结点的穷举。 因为情况有限,原创 2017-11-09 22:55:42 · 422 阅读 · 0 评论 -
【关于数组两种使用的思考】C语言中用map函数和广搜解决八数码问题(noj1571)
用一个9位数代替3x3的数组表示不同状态。可以节省空间,把二维转成一维。需要用数组时就用两个for循环把9位数转化为3x3的数组。 用map函数记录讨论过的状态和到达这种状态用了几步。同时解决了用used数组和step数组无法解决的判重和记录步数问题。在其他广搜问题中used数组其实是起到了一个描述状态是否被讨论过的作用,中括号里的数代表一个状态,=1就是这个状态已经讨论过,=0就是还没有讨论过。原创 2017-11-09 11:46:58 · 1013 阅读 · 0 评论 -
C语言中的素数环问题(回溯)//函数exit的使用
素数环问题 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: 把1到20这重新排列,使得排列后的序列A满足: a. 任意相邻两个数之和是素数 b. 不存在满足条件a的序列B使得:A和B的前k(0 <= k <= 19)项相同且B的第k+1项比A的第k+1项小。(即按字典序排列的第一项) 输入: 没有输入。 输出: 输出A,原创 2017-10-31 20:35:37 · 714 阅读 · 0 评论 -
C语言中的求图像周长问题(ZOJ 1047)
描述: 给一个用 . 和X表示的图形,图形在上、下、左、右、左上、左下、右上、右下8个方向都被看作是连通的,并且图像中间不会出现空洞,求这个图形的边长。 输入: 首先给出m、n、x、y四个正整数,下面给出m×n的图形,x、y表示点击的位置,全0表示结束。 输出: 点击的图形的周长。 输入样例: 2 2 2 2 XX XX 6 4 2 3原创 2017-11-04 13:56:52 · 1150 阅读 · 0 评论 -
C语言中的拨钟问题(枚举)(暴力搜索)POJ1166
描述 http://poj.org/problem?id=1166 有9个时钟,排成一个3*3的矩阵。 现在需要用最少的移动,将9个时钟的指针都拨到12点的位置。共允许有9种不同的移动。如下表所示,每个移动会将若干个时钟的指针沿顺时针方向拨动90度。 移动 影响的时钟 1 ABDE 2 ABC 3原创 2017-11-15 20:41:20 · 2442 阅读 · 1 评论 -
ip地址(noj1020)//gets函数在scanf函数后容易出现的错误
描述 想象一下你正在从输入设备上读入比特流,它表示的是IP地址,你现在的任务是把一个32位长的由’1’和’0’构成的序列转换成一个由’.’分隔成4段的IP地址。即每8位转换成一个十进制数,总共4段,由’.’分隔 输入 输入数据的第一行是一个正整数n(1<=n<=9),表示总共有n行数据需要你转换。接下来的n行里,每行都是一个32位的由’1’和’0’组成的串。 输出 输出原创 2017-12-03 13:45:21 · 334 阅读 · 0 评论 -
因子分解
描述 输入一个数,输出其素因子分解表达式。 输入 输入一个整数 n (2 <= n < 100)。 输出 输出该整数的因子分解表达式。 表达式中各个素数从小到大排列。 如果该整数可以分解出因子a的b次方,当b大于1时,写做 a^b ;当b等于1时,则直接写成a。 样例输入 60 样例输出 2^2*3*5#include<stdio.原创 2017-11-23 11:04:37 · 3135 阅读 · 0 评论 -
特殊密码锁
描述 有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态。 然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转。当然,如果你按的是最左或者最右边的按钮,该按钮只会影响到跟它相邻的一个按钮。 当前密码锁状态已知,需要解决的问题是,你至少需要按多少次按钮,才能将密码锁转变为所期望的目标状态。 输入 两行,原创 2017-11-23 11:02:54 · 1371 阅读 · 0 评论 -
极大极小搜索
极大极小搜索 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: 搜索n层,第一层取最大值,先输入两个整数n、randseed,用randseed设置随机数种子。 搜索时每层4个分支,能不能想这个分支走用函数canmoveto()判断,内容如下: int canmoveto(int m, int dire) { return(r原创 2017-11-23 10:59:53 · 347 阅读 · 0 评论 -
回文质数问题(用生成回文数的方法)
题目描述 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以151是回文质数。写一个程序来找出范围a,b间的所有回文质数。 输入格式 一行,二个整数a,b。 输出格式 输出一个回文质数的列表,一行一个。 样例输入 5 500 样例输出 5 7 11 101 131 151 181原创 2017-11-23 10:52:15 · 330 阅读 · 0 评论 -
Openjudge:全排列(递归调用)
全排列 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有’a’ < ‘b’ < … < ‘y’ < ‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。 输入 输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1原创 2017-11-30 16:10:24 · 1041 阅读 · 0 评论 -
2的幂次方表示答案及注释(NOIP)
2的幂次方表示 总时间限制: 1000ms 内存限制: 65536kB 描述 任何一个正整数都可以用2的幂次方表示。例如: 137=27+23+20 同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步:7=22+2+20(21用2表示) 3=2+20原创 2017-11-30 17:37:59 · 4403 阅读 · 1 评论 -
C语言中的熄灯问题extended lights out(枚举)POJ1222//乱用函数返回值会遭报应QAQ
Description http://poj.org/problem?id=1222 In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each (the actual puzzle has 5 rows of 5 buttons each). Each button h原创 2017-11-15 20:44:39 · 2044 阅读 · 0 评论 -
C语言中的装载问题(背包问题想法的运用)
背包问题中最主要的思想是f[i][j]=max(v[i]+f[i-1][j-w[i]],f[i-1][j]) 这个式子可以推广到其他问题的应用。比如装载问题。 其实质是求一堆数在一定范围限制中能取得的和的最大值。 考虑装载问题时,可以先把问题简化成只考虑一艘船,即这些货物在小于c1范围内能取得的和最大值。这个最大值可以用背包问题的想法求得。然后在检查剩下货物的和与c2的大小关系。原创 2017-10-31 18:11:27 · 2200 阅读 · 0 评论 -
【为什么数组不能用time命名?】独轮车问题(noj1044)坑爹题目!骗我钱财!毁我青春!!!QAQ TAT :(
描述 独轮车的轮子上有红、黄、蓝、白、绿(依顺时针序)5种颜色,在一个如下图所示的20*20的迷宫内每走一个格子,轮子上的颜色变化一次。独轮车只能向前推或在原地转向。每走一格或原地转向90度均消耗一个单位时间。现给定一个起点(S)和一个终点(T),求独轮车以轮子上的指定颜色到达终点所需的最短时间。 http://www.noj.cn/images/problemimages/wheel.原创 2017-11-09 09:35:32 · 618 阅读 · 1 评论 -
C语言中的8皇后问题。
8皇后问题时限:1000ms 内存限制:10000K 总时限:3000ms描述:输出8皇后问题所有结果。输入:没有输入。输出:每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格。不同的结果中,先输出第一个皇后位置靠前的结果;第一个皇后位置相同,先输出第二个皇后位置靠前的结果;依次类推。原创 2017-10-31 10:22:30 · 628 阅读 · 0 评论 -
实型数据的输入输出。如何保留x位小数?如何四舍五入?数据类型转换?
#include<stdio.h>#define PAI 3.14159265358979//宏定义π注意位数尽量多,更加精确 int main(){ double h,r,s;//实型数据为float和double统称 scanf("%lf%lf",&r,&h);//double型输入输出 printf("%.2lf\n",2*PAI*r);//保留两位小数原创 2017-10-21 20:49:49 · 3421 阅读 · 0 评论 -
C语言:三个数中找最大数问题。三目逻辑运算符的运用。
可以选择用三目逻辑运算符代替简单的if结构,使程序更加简洁。 如: x>0?a=6*x:x==0?b=7*y+x:c=x/4-y 就可以代替条件为x>0;x<0;x==0的三个if语句。这道题也是这样。#include<stdio.h>int main(){ int a,b,c,max; scanf("%d%d%d",&a,&b,&c); a>=b?(原创 2017-10-21 19:40:24 · 2522 阅读 · 0 评论 -
求解逆波兰表达式(Calculate the reverse Polish notation)。有关栈的最基础应用。
描述 编写函数int add(char s[]);计算字符串形式的逆波兰表达式(即两个操作数在前,计算符在后)。本题内,保证每个操作数均为1位数。操作符有’+’,’-‘,’*’,’/’四种。且保证计算过程中除法运算全部为整数除法,结果为整数。 如23+4*,,结果20 Write a function int add (char s []); Calculate the strin原创 2017-10-27 14:33:39 · 849 阅读 · 0 评论 -
coin test答案和注释。C语言中如何输出最简分数?
这道题有两处需要注意的地方。第一个是必须把整型变量显性转化成实型变量,做除法运算的结果才能精确的小数位。第二个是想要输出最简分数,应该先让分子分母同除它们的最大公约数,再以“%d/%d”的形式输出。#include<stdio.h>#include<string.h>#include<math.h>int gcd(int m,int n);int main(){ char str原创 2017-10-27 13:35:15 · 3355 阅读 · 0 评论 -
数字河问题的答案和注释。
题目简介描述: 数字河中的一个数n 的后继数是n 加上其每位数字的和。例如,12345的后继数是12360,因为12345+1+2+3+4+5=12360。如果数字河的第一个数为k,我们就称此数字河为river k。例如,river 480 代表序列{480, 492, 507, 519, …},river 483 代表序列{483, 498, 519, …}。 当两个数字河原创 2017-10-10 18:18:34 · 1400 阅读 · 0 评论 -
C语言中如何在不使用数组的情况下求方差?使用数组和使用for循环的区别。
使用数组的主要意义是能有序的记录一组数据,而使用for循环只能让一个变量去遍历这组数据,并不能记录这组数据。 如果想让for循环能尽可能实现记录数据的作用,可以使用叠加叠乘的方法,通过记录一组数据的和或积,从而间接体现这组数据。 所以要使用for循环求方差的话,尽量要把方差从(x1-xi)^2+(x2-xi)^2……这种需要知道每一个x1,x2值的的式子,因式分解成x1^2+x2^2+…原创 2017-10-19 11:40:16 · 2560 阅读 · 0 评论 -
单词倒置问题的答案和注释(C语言)
单词倒置 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: 给一行英文句子,把每个单词倒置,注意:单词的顺序不变。 输入: 一行英文句子,其中只包含大写字母、小写字母和空格。 输出: 把每个单词的字母倒置输出。 输入样例: akhk jrow mfo zj ajp 输出样例: khka worj ofm原创 2017-10-19 10:46:43 · 832 阅读 · 0 评论 -
运用筛法思想解决其他题目。选太子(select the prince)和幸运的编号
我觉得筛法的本质是将符合某特定条件的数标记,并以标记为依据将这些数跳过。 对于幸运的编号这一题,我觉得就可以运用筛法的思想。选太子原创 2017-10-17 22:53:20 · 297 阅读 · 0 评论 -
if语句的运用:用C语言解决奖金发放和出租车费问题。
以下两道题都相当于用if语句代替了switch语句的结构。switch结构是根据表达式找到符合条件的case分支,然后执行那个case分支和之后的所有case分支。而if,else if结构与之不同的是,if表达式判断为真,就只执行当前分支并退出结构。#include<stdio.h>int main(){ double i,b=0; scanf("%lf",&i);原创 2017-10-21 21:13:03 · 1642 阅读 · 0 评论 -
C语言:输入日期,判断是这一年的第几天?
#include<stdio.h>int sum(int a,int b,int c);int runnian(int m);int main(){ int a,b,c; scanf("%d%d%d",&a,&b,&c); b=-b; c=-c; printf("%d",sum(a,b,c));}int runnian(int m){ i原创 2017-10-21 21:15:48 · 10274 阅读 · 4 评论 -
C语言取花生米(取棋子)系列问题。从一堆中轮流取的情况。
最简单情况描述 Tom和Jerry是邻居,他们都喜欢吃花生米。Tom的信条是“规则永远由强者制定,弱者只有遵守的权力”;Jerry则深信“头脑比拳头更有力量”。除此之外,他们都很聪明,恩,至少有211工程大学本科生水平。 五一长假第一天,Tom和Jerry在仓库散步的时候发现了一堆花生米(共n粒,n大于零小于等于1000)。Tom制定分花生米规则如下: 1、Tom和Jerry轮流从堆中取出原创 2017-10-28 22:04:25 · 2609 阅读 · 0 评论 -
C语言中的0-1背包问题
描述: 需对容量为c 的背包进行装载。从n 个物品中选取装入背包的物品,每件物品i 的重量为wi ,价值为pi 。对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高。 输入: 多个测例,每个测例的输入占三行。第一行两个整数:n(n<=10)和c,第二行n个整数分别是w1到wn,第三行n个整数分别是p1到pn。 n 和 c 都等于零标志输原创 2017-10-31 16:00:36 · 862 阅读 · 0 评论 -
C语言通过递归调用函数解决求阶乘和ACKERMAN函数问题
输入整型n(n>=0),输出n!#include<stdio.h>int fac(int n){ int sum; if(n==1||n==0) sum=1; else sum=n*fac(n-1); return sum;}int main(){ int n; scanf("%d",&n); printf("%d",fac(n))原创 2017-10-30 23:27:39 · 3341 阅读 · 0 评论 -
<C语言>用递归调用函数解决穷举n位二进制数问题
穷举n位二进制数 时限:100ms 内存限制:10000K 总时限:300ms 描述: 输入一个小于20的正整数n,要求按从小到大的顺序输出所有的n位二进制数,每个数占一行。 输入: 输入一个小于20的正整数n。 输出: 按从小到大的顺序输出所有的n位二进制数,每个数占一行。 输入样例: 3 输出样例: 000 001 0原创 2017-10-31 10:55:33 · 1367 阅读 · 1 评论 -
C语言:验证哥德巴赫猜想(Goldbach conjecture verification )
输入 输入测例n满足6<= n <1000000,n为偶数。 输出 输出满足条件的数,形式为n = a +b,其中a和b为素数。如果存在多组素数a和b,则选择b-a最大的一组作为输出。如果不存在这样的素数a,b,输出”不符合猜想”.#include<stdio.h>int Prime(int m){ if(m==1) return 0; for(int i=原创 2017-10-22 16:55:19 · 5349 阅读 · 0 评论 -
C语言中用队列和搜索解决跳马问题(多组测试数据)noj1043//运行时错误的一种解决方案
描述 在国际象棋中,马的走法与中车象棋类似,即俗话说的“马走日”,下图所示即国际象棋中马(K)在一步能到达的格子(其中黑色的格子是能到达的位置)。 现有一200*200大小的国际象棋棋盘,棋盘中仅有一个马,给定马的当前位置(S)和目标位置(T),求出马最少需要多少跳才能从当前位置到达目标位置。 输入 本题包含多个测例。输入数据的第一行有一个整数N(1<=N<=1000),表示原创 2017-11-07 15:18:07 · 1524 阅读 · 0 评论 -
C语言用搜索和队列知识解决“电子老鼠创迷宫问题”(noj1042)
输入 本题包含一个测例。在测例的第一行有四个由空格分隔的整数,分别表示起点的坐标S(x.y)和终点的坐标T(x,y)。从第二行开始的12行中,每行有12个字符,描述迷宫的情况,其中’X’表示建筑物,’.’表示路. 输出 输出一个整数,即电子老鼠走出迷宫至少需要的步数。 输入样例 2 9 11 8 XXXXXXXXXXXX X……X.XXX X.X.XX原创 2017-11-07 14:01:42 · 576 阅读 · 0 评论 -
C语言中用队列和搜索解决"加1乘2平方问题"
描述 给定两个正整数m、n,问只能做加1、乘2和平方这三种变化,从m变化到n最少需要几次 输入 输入两个10000以内的正整数m和n,且m小于n 输出 输出从m变化到n的最少次数 输入样例 1 16 输出样例 3#include<iostream>#include<stdio.h>#include<queue>//用队列声明头文件 usi原创 2017-11-07 10:52:16 · 1434 阅读 · 0 评论 -
素数筛法(适用于较大数且不超时)思路、答案和注释
用筛法求[a,b]中的素数。 如何优化思路可能存在的bug关于筛法的一点儿经验原创 2017-10-17 15:04:00 · 1176 阅读 · 0 评论