要声明的是这几篇在BIT程设课期间写的,水平非常有限,算是自娱。
我也只能说些自身教训了,仅供菜鸟共勉。
第一题RPWT。看到第一题N多人提交数比后几题还多便深感RP重要性。输入方面大循环里scanf读入此次猜的数字,然后gets回答。结果缓冲区里回车被gets读入于是百度在gets之前加了fflush(stdin);清空缓冲区,忘了可以getchar()也不知道可以scanf(“\n”);之后琛神告知这种方法用不多且全清空可能会引起错误。之后就是字符串比较高了存一个数组,低的存另一个,两组循环判断如果答案比高的高或者比低的低就都会输出没RP。于是就WA了第二个。纠结几番觉得如果Jerry很二Tom说5低了他猜3,结果Tom说高了,然后他猜4,对了,按之前的就会输出两个没RP,于是若有输出便标记一下,搞定。
描述
Tom 和 Jerry 做猜数字的游戏,Tom 想一个数字然后让 Jerry 去猜,数字的范围在 1 到 10 之间。对于 Jerry 每讲的一个数,Tom 都要讲这个数是 too high 或者 too low 或者 right on,直到 right on 结束。为了防止 Tom 作弊,Jerry 把每一次的对话记录下来,现在让你去判断 Tom 有没有作弊。
输入
游戏可能做很多次,直到 Jerry 猜 0 的时候游戏结束,每一次猜测由一个正整数和一行回答组成。
输出
对每一次游戏如果 Tom 的回答有自相矛盾的地方,就输出 Tom is dishonest,否则输出 Tom may be honest。
#include"stdio.h"
#include"string.h"
int main()
{
}
第二题Vito's Familiy我果断想起教父,英文题就把题意搞错了,算了半天距离却输出的是可住的门牌号,而且不懂他只能住其中一个亲戚家,果断霸气让他任选一号住。英文差的伤不起。
Background
The world-known gangster Vito Deadstone is moving to New York. He has a very big family there, all of them living in Lamafia Avenue. Since he will visit all his relatives very often, he is trying to find a house close to them.
Problem
Vito wants to minimize the total distance to all of them and has blackmailed you to write a program that solves his problem.
Input
The input consists of several test cases. The first line contains the number of test cases.
For each test case you will be given the integer number of relatives r ( 0 < r < 500) and the street numbers (also integers) s0, s1, ..., si, ..., sr where they live ( 0 < si < 30000 ). Note that several relatives could live in the same street number.
Output
For each test case your program must write the minimal sum of distances from the optimal Vito's house to each one of his relatives. The distance between two street numbers si and sj is dij= |si-sj|.
#include"stdio.h"
#include"math.h"
int main()
{
}
第三题图形编辑器http://acm.uva.es/p/v102/10267.html真纠结。除了各种模拟麻烦外,改相反的坐标就改半天,当然耗时最长的是F指令。开始觉得可以循环判断目标点上下左右是否和原颜色相同,是就改色,直到填满,后来想到边界情况判断麻烦循环次数多就硬着头皮上递归。交上之后所有F指令用例RE。请教琛神一眼看出递归停止条件边界只判断了右边界和下边界。补上后倒数第二个保密RE。边逛讨论区边乱改,用getchar替代scanf处理垃圾数据,检查相同颜色染色,存位图名数组改大,输入格式检查,检查输入坐标超I指令规定范围……继续染红几次后终于A了。
#include <stdio.h>
#include <string.h>
int x,y,x1,y1,x2,y2,c=0,r=0,judge[300][300];
char command,color,graph[300][300],name[300]="";
int min(int a,int b)
{
}
void Fill(int i,int j,char origin,char color)
{
}
int main()
{
}
第四题分牌。虽然与第三题耗时差不多,但感觉顺多了。把合法牌类型和每个牌型判断函数化,主函数的任务就是》用函数判断是否合法》小写字母化》tjqka换成9之后的ascii码》判断是否是已有牌》存入牌堆》满五张》从小到大排序》按优先级多重if else调用函数,最里头的else是High Card。交上哇了倒二用例,琛神一上检查个有两张牌相同的Three-of-a-kind,错了。原先思路是两重循环检测相同的牌计数(为方便包括自身相同),则如果是对子,最终计数值肯定是5+2,类似,Three-of-a-kind肯定是5+2*3,但仅对另两张不同有效。于是因为之前排序了,所以改为判断前三张||中三张||后三张相同。虽然各种问题,但是函数化了感觉调试就顺手,即使改了半天还是感觉比较顺利。
背景
游戏公司老板准备开发一个人机交互的打牌游戏,项目组里每个人都分配了不同的工作。你现在负责的模块就是为计算机设计一个分牌程序,帮助计算机像人一样可以把分到的牌进行分类。
众所周知,一副扑克牌有四种花色(即方块、梅花、红桃和黑桃)和14个分值级别(即二、三、四、五、六、七、八、九、十、J、Q、K和A)。这里假设A是分值最高级别的。
程序每次读取一手五张牌,然后根据下列类别把手中的牌分类(列出的顺序依次是从最好类别到最坏类别):
- Straight flush: 同花顺的牌(即顺序相连又都是同花色)
- Four-of-a-kind: 四张相同的牌(四张牌级别相同)
- Full house: 三张花色相同和两张花色相同的牌(三张牌是同样的花色,而另外两张牌是同样的花色)
- Flush: 同花色的牌(五张牌是同花色的)
- Straight: 同顺序的牌(五张牌的级别顺序相连)
- Three-of-a-kind: 三张相同的牌(三张牌级别相同)
- Two pairs: 两对子
- Pair: 一对(两张牌级别相同)
- High card: 其它牌(任何其它情况的牌)
如果一手牌有两种或多种类别,程序将选择最好的一种。
为了输入方面,这里把牌的级别和花色简化(字母不区分大小写):
级别:2 3 4 5 6 7 8 9 t j q k a 花色:c d h s
输入
每组要求输入五张牌的内容,每张牌一行(格式参见上述类型英文名)。每次可以运行多组测试,如果输入为0而不是牌,则程序终止。如果用户输入非法牌或者输入同张牌两次,程序将把此牌忽略掉,产生报错信息(Duplicate card; ignored.或者Bad card; ignored.),然后要求输入另外一张牌。
#include"stdio.h"
#include"string.h"
#include"ctype.h"
char grade[2][19]={{'2','3','4','5','6','7','8','9','t','j','q','k','a',':',';','<','=','>','\0'},{'d','c','h','s','\0'}};
int i=0,j=0;
int compare(char * add)
{
}
int Straightflush(char * add)
{
}
int Fourofakind(char * add)
{
}
int Fullhouse(char * add)
{
}
int Flush(char * add)
{
}
int Straight(char *add)
{
}
int Threeofakind(char *add)
{
}/////////////////////////////////////////
int Twopairs(char *add)
{
}//////////////////////////////////////////
int Pair(char *add)
{
}////////////////////////////
int main()
{
}
--------------------------滑水的分割线-----------------------------
咳咳,水毕,礼毕。
PS:洛阳亲友如相问,就说我在写代码。
一