- 浏览: 73000 次
- 性别:
- 来自: 杭州
最新评论
文章列表
题目描述见:uva 101
or poj 1208
关键在于彻底理解题目中搬积木的几个命令的含义,见具体分析
如果还不能理解题意,那么找一个正确通过的代码,编译并输入测试数据,查看其每一个命令的执行情况。如我的代码中162行注释内容取消后即可显示每一步执行后当前积木的情况)
这个题目似乎没有合适的数据结构,由于插入删除操作较多,所以直接用了链表,并且使用双重指针,差点把自己搞晕。(另外,刚开始写的代码能在poj1208上通过,但不能在uva 101上通过,后来发现是141行中的continue误写成了break。网上也有类似的情况,似乎是因为没有考虑到特殊情况的处理(即两个积木 ...
forth
是一种基于栈的程序设计语言,其语法使用逆波兰表达式(即后缀表达式),forth的黄金期是上世纪80年代,现在使用的人很少,但是却非常的有趣。还有一个以forth为基础开发的语言factor
,它增加了许多当代的编程语言特征。
相关网站:
forth interest group
(compilers
,tutorials
, forth standard
)
forth faq
forth Versus C
(also see forth And Not C
)
comp.lang.forth.repositor ...
代码比较粗糙,主要是用于对排序算法的理解,因而忽略了边界和容错处理相关代码。
相关文档:
Insert Sort
,Bubble Sort
,Select Sort
,Shell sort
,Quick sort
,Heap sort
,Merge sort
on Wikipedia
algorithm Repository
:C语言实现部分排序算法,代码质量较高,其实现类似于库函数
sorting and searching algorithms
:点击左边的链接即可查看整份文档
排序算法性能比较:图片链接
插入,选择,冒泡排序的算法复 ...
开发编译器相关的一些网络资源:
how difficult is it to write a compiler?
wikipedia compiler
compiler 101 code competetion
pl/0
(couses
,source code
,another source code
)and pl/I
language
the gentle compiler construction system
compiler lecture notes
(algorithm
and operat ...
题目见:zoj 1025
先对木棒按照长度进行排序,然后再计算对应重量构成的数组中非递减子序列的个数。
相关代码(悲催的是该代码不能在poj1065
和hdoj1051
下通过,懒得看具体是什么原因了)
/* zoj 1025 Wooden sticks */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 5010
struct stick{
int length;
int weight;
};
typedef stru ...
zoj 1088 System Overload
- 博客分类:
- C语言
约瑟夫环
(josephus problem
)问题,有公式
可以直接套用
我使用暴力破解方法求解(用时3秒多)。
代码如下:
/* zoj 1088 System Overload */
#include <stdio.h>
#include <string.h>
#define MAXBUILDING 150
int minStepNum(int totalBuilding, int lastNum);
int main(void)
{
int n;
/* int minStepTab[MAXBUILDIN ...
zoj 1091 Knight Moves
- 博客分类:
- C语言
题目见zoj 1091
使用宽度搜索优先来求解,这个算法已经忘记的差不多了,所以写出来的代码很罗嗦,看起来很不清晰。
好像还可以直接用公式或者神经网络算法求解,详见Knight's Tour
/* zoj 1091 Knight Moves */
#include <stdio.h>
#include <string.h>
#define MAX 100
#define BOARDSIZE (8+1)
struct queueStruct{
int x;
int y;
int step;
}queue[MAX] ...
题目见zoj 1078
主要是判断一个整数在基数为2-16之间的某个数字时是否为回文,我是直接该整数转换成对应基数的表示的逆序列,并计算出该表示下的值,判断是否等于这个整数值,如果相等,那么就是回文,如果不相等就不是。
/* zoj 1078 Palindrom Numbers */
#include <stdio.h>
#define MAX 30
int isPalindrom(int base, int decNum);
int main(void)
{
int i,count;
int n,baseStr[MAX];
...
题目见zoj 1006
或poj 1317
简单的解密算法,直接套用题目中公式即可。
/* zoj 1006 Do the Untwist */
#include <stdio.h>
#include <string.h>
#define MAXLEN 80
#define MAGICNUM 28
char num2Char(int n);
int char2Num(char c);
int main(void)
{
int key;
char ciphertext[MAXLEN],plaintext[MAXLEN ...
题目见zoj 3488
很简单的题目,却没能一次搞定,因为没看清楚题目中输入数据都是实数。
该题目考察浮点数的比较(因为浮点数在计算机中存储是近似存储,所以不能直接将两个浮点数直接用大于或小于符号相比较)
/* zoj 3488 conic section */
#include <stdio.h>
#include <math.h>
#define SMALLNUM 1e-8
int main(void)
{
double a,b,c,d,e,f;
int n;
scanf("%d", ...
题目内容见zoj1005
由于A,B互素且A的容量小于B,那么可以将B装满并且倒入A中,如果A被装满则将A中的内容全部清空,一直进行下去直到某一刻B中容量恰好等于目标的容量。这种方法能得到正确的结果,但是通常得不到最优结果。
#include <stdio.h>
int main(void)
{
int a,b,target,i;
int curA,curB;
while(scanf("%d %d %d", &a, &b, &target) == 3 )
{
cur ...
zoj 1074 To the MAX
- 博客分类:
- C语言
见zoj 1074
参考了别人的思路才搞定。见http://blog.csdn.net/acm_davidcn/article/details/5834454
使用了最大连续子序列和的算法,虽然自己也知道这个算法,但是却没办法做到活学活用。
/* zoj 1074 To the Max */
#include <stdio.h>
#include <string.h>
#include <limits.h>
#define MAX 105
int main(void)
{
int i,j,k;
int a[MAX ...
zoj 1154 Niven numbers
- 博客分类:
- C语言
见zoj 1154
还是需要将输入数据当作字符串来处理,不能直接使用整型。
/* zoj 1154 Niven numbers */
#include <stdio.h>
#define MAX 100
int isNivenNum(int base, char str[]);
int main(void)
{
int totalBlocks;
int base;
int first = 1;
char str[MAX];
scanf("%d", &totalBlocks);
whil ...
hdoj 1015 Safecracker
- 博客分类:
- C语言
见hdoj 1015
或 zoj 1403
或tzu 1308
我使用了枚举法,代码写的很罗嗦,可能还是深度优先搜索写起来更清晰。
/* hdoj 1015 */
#include <stdio.h>
#include <string.h>
#define MAX (12+5)
#define RESLEN 5
int bubSort(int a[], int n);
int str2Ints(char str[], int a[], int len);
int ints2Str(int a[], char str[], int ...
hdoj 1013 Digital Roots
- 博客分类:
- C语言
链接:zoj 1115
或 hdoj 1013
或poj 1519
虽说是水题,却几经波折才搞定。该题目中的数字可能非常大,所以不能使用整型数,只能采用字符变量
代码如下:
#include <stdio.h>
int digitalRoot(int n);
int digitSum(int n);
int main(void)
{
char c;
int sum;
while( (c = getchar()) != EOF)
{
if(c == '0')
break;
sum = ...