- 博客(33)
- 收藏
- 关注
原创 3个水杯
三个水杯时间限制:1000 ms | 内存限制:65535 KB难度:4描述给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算。现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数。输入第一行一个整数N(0接下来每组测试数据有两行,第一行给出三个整
2013-11-29 21:22:41 500
原创 蛇形填数
蛇形填数时间限制:3000 ms | 内存限制:65535 KB难度:3描述在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:10 11 12 19 16 13 28 15 14 37 6 5 4输入直接输入方陈的维数,即n的值。(n输出输出结果是蛇形方陈。样例输入3样例输出7 8 1
2013-11-28 10:49:53 482
原创 黑洞数
黑洞数:是指于四位数中,只要数字不完全相同,将数字由大到小的排列减去由小到大的排列。假设一开始选定的数字为,=f(),=f(),...,=f() 用同样的规则继续算下去,最后的结果一定是6174。 比如说一开始选定9891,则f(9891)=9981-1899=8082,f(8820)=8820-0288=8532,f(8532)=8532-2358=6174,f(7641)=76
2013-11-25 23:37:29 1008
原创 三个字符排序
ASCII码排序时间限制:3000 ms | 内存限制:65535 KB难度:2描述输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。输入第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格。输出对于每组输入数据,输出一行,字符中间用一个空格分开。样例
2013-11-23 16:02:13 2268
原创 sudolu killer
思路: 找到问号,判断哪个数字可以使用,即行列九宫格里 都没有出现过的数字就能用 每个问号都可能有多种取值,找到一个符合的数字后,进入下个问号,这就相当于全排列:每个数字有多种取值,判断用没用过后就可以进入下一层细节:1 因为这道题只要求输出一组数据所以找到第一组数据后,无需继续进行,return 就好,我用了count来计数,
2013-11-23 15:56:48 751
原创 火车进站
#include#includeint temp[50];int mark[50];int b[50];int n;int count;void dfs(int level){ int i, j, k = 0; if(count > 20) return; if(level == n + 1){ for(i = 1; i <= n; i++){ k = 0
2013-11-23 14:12:15 4924
原创 将一个数组排序(数组的左一半和右一半都是小到大或者大到小)
#include#includeint main(){ char array[10]; char b[10];//临时数组存放临时数据 int i = 0, j, k, z, count = 0; gets(array); j = k = strlen(array) / 2 ; z = strlen(array); while(count != z){//临时数组里的元素
2013-11-22 17:06:32 1023
原创 typedef char array[10]
#includetypedef char array[100][90];int main(){ array b; int i; for(i = 0; i < 4; i++) gets(b[i]); printf("%c\n",b[2][3]); return 0;}
2013-11-21 21:45:44 1427
原创 整数划分
题目1:将n分成不大于m的数相加有多少种情况思路:将大问题化成小问题。 分问题的条件就是 : 有没有m 第一种情况:n 第二种情况:n == m, 有[1 + (n由m-1的数组成)] 个情况 例:5 划分成不大于5的数的划分,有5:由5组成的 情况只有1种
2013-11-20 16:46:47 653
原创 运用全排列简单搜图型
运用全排列简单搜图型全局变量,题目中一直会用到的东西void 搜索(int x, int y){ if(x,y 到了目标){//当有目标的时候写 if(限定条件) operation..//count or print } else{ for(几个方向){ if(不越界 && 没走过){ 标记走过;
2013-11-16 10:29:47 486
原创 大数阶乘
大数阶乘时间限制:3000 ms | 内存限制:65535 KB难度:3描述我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?输入输入一个整数m(0输出输出m的阶乘,并在输出结束之后输入一个换行符样例输入50样例输出304140932017133780436126081660647688443
2013-11-15 17:19:24 439
原创 验证数独
#include#includeint sudoku[9][9];int mark[20];void dfs(){ int flag = 0; int i, j; int a, b; for(i = 0; i < 9; i ++){//row judge memset(mark, 0, sizeof(mark));//判断完一行进行初始化 for(j = 0; j < 9
2013-11-14 13:13:40 524
原创 我的前缀式计算
#includeusing namespace std;#include#include#include#includestack q;char str[10000];char num[10];int n;int main(){ char temp; float ch1, ch2; int i, j; float a; while(gets(str)){
2013-11-13 18:53:36 419
原创 最小步数
最少步数时间限制:3000 ms | 内存限制:65535 KB难度:4描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,1,0,1,0,0,1 1,1,
2013-11-12 21:31:17 410
原创 素数环
#includeint mark[100];int num[100];int n;int flag[100];void prime(){ int i, j; flag[0] = flag[1] = 1; for(i = 2; i <= 50; i ++){ if(flag[i] == 0){ for(j = i + i; j <= 100; j = j + i){
2013-11-11 22:01:50 411
原创 武士风度的牛(广搜)
#include#includeusing namespace std;char map[200][200];int row, col;typedef struct node{ int x, y; int step;}node;//information of nodeint dir[8][2] = {{-1,2}, {1,2},{2,1},{2,-1},{1,-2},
2013-11-10 21:56:47 1350
转载 STL 栈的使用
STL 中栈的使用方法(stack)基本操作:push(x) 将x加入栈中,即入栈操作pop() 出栈操作(删除栈顶),只是出栈,没有返回值top() 返回第一个元素(栈顶元素)size() 返回栈中的元素个数empty() 当栈为空时,返回 true使用方法:和队列差不多,其中头文件为:#include 定义方法为:stackint>s1;//
2013-11-10 18:41:50 810
转载 STL 队列的使用方法
STL 中队列的使用(queue)基本操作:push(x) 将x压入队列的末端pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值front() 返回第一个元素(队顶元素)back() 返回最后被压入的元素(队尾元素)empty() 当队列为空时,返回truesize() 返回队列的长度 使用方法:头文件:#include 声
2013-11-10 18:40:30 810
原创 NYOJ 523 (深搜,不可用的方法)
#includeint dir[6][3] = {{0,0,1},{0,0,-1},{1,0,0},{-1,0,0},{0,1,0},{0,-1,0}};int map[55][55][55];int A, B, C, T;int minute;void count(int step, int x, int y, int z){ //printf("step:%d\n",step)
2013-11-09 21:41:47 438
原创 NYOJ143 康托的应用
h#include#include#define N 12// there are N numbers in arrayint num[14];int fac(int i){ int j, sum = 1; for(j = 1; j <= i; j++){ sum = sum * j; } return sum;}int main(){ int code,
2013-11-09 19:50:57 479
原创 带分数
标题:带分数100 可以表示为带分数的形式:100 = 3 + 69258 / 714 还可以表示为:100 = 82 + 3546 / 197 注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。类似这样的带分数,100 有11 种表示法。题目要求: 从标准输入读入一个正整数N (N程序输出该数字
2013-11-06 20:07:51 569
原创 康托展开
康托展开维基百科,自由的百科全书跳转至: 导航、 搜索康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。以下称第x个全排列是都是指由小到大的顺序。公式X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[
2013-11-05 20:20:19 596
原创 N皇后
思路:是全排列的一个变形,就是加了限定条件这个限定条件就是 对角线上只能有一个数,行列只能有一个数这种 限制 简化了输出,也即 像全排列 每一行所对应的列数 不能重复 并且列数与列数之间又存在限定条件比方说 右对角线:行数 1 2 3 4 5 6列数 1 2 3 4 5 6 2 3 4 5 6 1就会发现 这个方
2013-11-04 22:56:47 387
原创 素数环
思路: 全排列,不过是1 的全排列, 即,调用全排列的函数时,传1 全排列中,要将数字存入 数组中 数组里,将前后两个数相加 判断是不是素数,这里应该每一层都与数组里前一个数相加进行判断,不否和就回到上一层//这里 素数要先存入素数数组中,最后一层的时候将这个数+1 进行判断
2013-11-03 22:46:08 555
原创 三元组法 将矩阵转置 并输出转置后的三元组
#include#define ROW 3 #define COL 3#define MAXSIZE 30int number[MAXSIZE+1], position[MAXSIZE+1];//number数组表示 每一列有几个元素,position数组存放每一列第一个元素在矩阵中的位置typedef int ElemType;typedef struct{ int row,
2013-11-03 21:28:53 1967
原创 NYOJ 27 水池数目
#includeint n;int map[101][101];int row, col;int der[4][2]={{0, 1},{1, 0},{0 , -1},{-1, 0}};//用二维数组记录四个方向void count(int x, int y){ int i; int x1,y1 ; map[x][y] = 0;//可以走到即置零 //else //{
2013-11-03 21:23:58 624
原创 全排列
#include void full_array(int k , int n , int *a , int *b) //k : layers n:all numbers *a:way *b:puts numbers{ int i ; if(k == n){ for(i = 0 ; i < n ; i ++) {
2013-11-02 21:24:18 361
原创 NYOJ58最小步数(神搜)
#includeint min_step = 1000000;int c,d;int map[][9]={{1,1,1,1,1,1,1,1,1}, {1,0,0,1,0,0,1,0,1}, {1,0,0,1,1,0,0,0,1}, {1,0,1,0,1,1,0,1,1}, {1,0,0,0,0,1,0,0,1}, {1,1,0,1,0,1,0,0,1}, {1,1,0,1,0,1
2013-11-02 20:54:52 587
原创 NYOJ 22素数求和问题(只是找素数的一个变形 和 183 题很像)
#include#include#define MAX_SIZE 10001int flag[MAX_SIZE];int a[MAX_SIZE];int main(){ int sum; int N, M; int i, j; scanf("%d",&M); flag[0] = flag[1] = 1; for(i = 2; i <= sqrt(MAX_SIZE); i +
2013-11-01 23:56:36 725
原创 NYOJ187快速判断素数
#include#include#define MAX_SIZE 2000001//注意:define 没有 分号int flag[MAX_SIZE];int main(){ int a; int i, j; flag[0] = flag[1] = 1; for(i = 2; i <= sqrt(MAX_SIZE); i ++)//遍历了所有的数并进行标记 { if(fl
2013-11-01 23:38:29 727
原创 筛选法(判断一个数是不是素数,将所有数标记,再判断)
#include#includeint flag[1000];int main(){ int a; int i,j; while(1){ scanf("%d",&a); for(i = 2; i <= sqrt(a); i ++) { if(flag[i] == 0 ) { for( j = i + i; j <= a; ) { fl
2013-11-01 22:58:47 692
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人