紫色的雨
为什么输出结果就是不对呢。。。。。
展开Biu

题目:

在很多软件中,输入拼音的首写字母就可以快速定位到某个词条。比如,在铁路售票软件中,输入: “bj”就可以定位到“北京”。怎样在自己的软件中实现这个功能呢?问题的关键在于:对每个汉字必须能计算出它的拼音首字母。

GB2312汉字编码方式中,一级汉字的3755个是按照拼音顺序排列的。我们可以利用这个特征,对常用汉字求拼音首字母。

GB2312编码方案对每个汉字采用两个字节表示。第一个字节为区号,第二个字节为区中的偏移号。为了能与已有的ASCII编码兼容(中西文混排),区号和偏移编号都从0xA1开始。

我们只要找到拼音a,b,c,...x,y,z 每个字母所对应的GB2312编码的第一个汉字,就可以定位所有一级汉字的拼音首字母了(不考虑多音字的情况)。下面这个表给出了前述信息。请你利用该表编写程序,求出常用汉字的拼音首字母。

a 啊 B0A1

b 芭 B0C5

c 擦 B2C1

d 搭 B4EE

e 蛾 B6EA

f 发 B7A2

g 噶 B8C1

h 哈 B9FE

j 击 BBF7

k 喀 BFA6

l 垃 C0AC

m 妈 C2E8

n 拿 C4C3

o 哦 C5B6

p 啪 C5BE

q 期 C6DA

r 然 C8BB

s 撒 C8F6

t 塌 CBFA

w 挖 CDDA

x 昔 CEF4

y 压 D1B9

z 匝 D4D1

【输入、输出格式要求】

用户先输入一个整数n (n<100),表示接下来将有n行文本。接着输入n行中文串(每个串不超过50个汉字)。

程序则输出n行,每行内容为用户输入的对应行的汉字的拼音首字母。

字母间不留空格,全部使用大写字母。

例如:

用户输入:

3

大家爱科学

北京天安门广场

软件大赛

则程序输出:

DJAKX

BJTAMGC

RJDS

我的程序:

#include"stdio.h"

#include"string.h"

main()

{

char a[23][3]={"啊","芭","擦","搭","蛾","发","噶","哈","击","喀","垃","妈","拿","哦","啪","期","然","撒","塌","挖","昔","压","匝"};

char c[23]={'a','b','c','d','e','f','g','h','j','k','l','m','n','o','p','q','r','s','t','w','x','y','z'};

char b[100][102];

char d[100][102];

char t[3];

int n,i,j,k;

scanf("%d",&n);

for(i=0;i<n;i++)

scanf("%s",b);

for(i=0;i<n;i++)

{

j=0;

while(b[j]!='\0')

{

t[0]=b[j];

t[1]=b[j+1];

t[2]='\0';

for(k=0;k<22;k++)

if(strcmp(t,a[k])>=0&&strcmp(t,a[k+1])<0)

break;

j=j+2;

}

d[j/2]=c[k];

}

d[j/2]='\0';

for(i=0;i<n;i++)

{

j=0;

while(d[j]!='\0')

{

printf("%c",d[j]-32);

j++;

}

printf("\n");

}

}

[查看全文]
汝欠咱的一生
额。这是他们喜欢War3的人出的题。
展开Biu

Description:

恶魔猎手尤迫安野心勃勃.他背叛了暗夜精灵,率深藏在海底的那加企图叛变:守望者在与尤迪安的交锋中遭遇了围杀.被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去,到那时,刀上的所有人都会遇难:守望者的跑步速度,为17m/s, 以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗魔法值10点。守望者的魔法值恢复的速度为4/s,只有处在原地休息状态时才能恢复。
现在已知守望者的魔法初值M,他所在的初始位置与岛的出口之间的距离S,岛沉没的时间T。你的任务是写一个程序帮助守望者计算如何在最短的时间内逃离荒岛,若不能逃出,则输出守望者在剩下的时间内能走的最远距离。注意:守望者跑步、闪烁或休息活动均以秒(s)为单位。且每次活动的持续时间为整数秒。距离的单位为米(m)

Input:

输入仅一行,包括空格隔开的三个非负整数MST

Output:

输出包含两行:

1行为字符串"Yes""No" (区分大小写),即守望者是否能逃离荒岛。

2行包含一个整数,第一行为"Yes" (区分大小写)时表示守望着逃离荒岛的最短时间

第一行为"No" (区分大小写) 时表示守望者能走的最远距离。

Sample Input:

39 200 4

Sample Output:

No

197

HINT:

30%的数据满足: 1 <= T<= 101 <=S<= 100
50%的数据满足: 1 <= T <= 10001 <= S <= 10000
100%的数据满足: 1 <= T <= 3000000 <= M<=1000 1 <=S <= 10^8

额。规律基本推出来了。基本就看你用完B还剩多少的MP。

但是。果断WA了。感觉做不来了。求思路就行。

[查看全文]
汝欠咱的一生
额。超时,求给算法……
展开Biu

本帖最后由 汝欠咱的一生 于 2013-4-18 10:29 编辑

Description:

得到一个正整数,然后你写下一个不大于这个数一半的正整数,对你刚写下的这个正整数做同样的操作。直到无法再写数字为止。由此可见呢,一个数字会有很多种不同“尾巴”,尾巴指的是你所写下的数字串。我们的问题就是给出一个数字N(1<=N<=1000),它的尾巴有多少种?

Input:

有若干测试数据,每个测试数据占一行,每行一个数字N。

Output:

输出每组测试数据的尾巴数量,一行一个。

Sample Input:

6

12

Sample Output:

3

10

解释下样例数据1: 6的尾巴有136,126,16。一共有3种。

额。我用递归做的……果不其然就超时了……。

a[1]=1,a[2]=1,a[3]=1,a[4]=2,a[5]=2,a[6]=3,a[7]=3……

[mw_shl_code=c,true]a=a[1]+a[2]+…+a[i/2][/mw_shl_code]

然后就超时了……

求不超时的算法……

[查看全文]
汝欠咱的一生
关于链表的链接问题。
展开Biu

好吧。其实我用笨办法做出来了。但是在OJ上和别人的一比。时间和内存占用看得我想哭。

就是把2个链表 按元素的从大到小链接起来。

input :

2 3

1 6

2 4 4

ouput:

6 4 4 2 1

第一排就是链表A和链表B元素个数;

第二排就是链表A的元素;

第三排就是聊表B的元素。

我的方法比较笨。先把它们链接起来。然后冒泡。

现在想直接对它们进行链接。求解。

[查看全文]
绯色基
2013编程之美全国挑战赛 ----- 初赛1场
展开Biu

本帖最后由 绯色基 于 2013-4-13 18:24 编辑

好吧,我就是转一下题目=,=

竞价

时间限制: 1000ms 内存限制: 256MB
描述
Alice和Bob都要向同一个商人购买钻石。商人手中有 N 颗钻石,他会将它们一颗颗地卖给他们,Alice和Bob通过竞价的方式来决定钻石的归属。具体的过程如下:商人首先指定其中一个人开始报价,之后两人轮流报价,要求是一定要比对方报的价格更高。任何时候,如果一个人不愿出价或者出不起价钱时,可以宣布弃权,则对手以最后一次报的价格将钻石买下。当然,如果两人都没钱,商人是不会卖钻石的。首次报价至少为 1,并且只能报整数的价钱。
Alice和Bob特别爱攀比,因此他们都希望能比对方买到更多的钻石。Alice和Bob各自带了 CA 和 CB 的钱用于竞拍钻石。此外,Alice和商人有很不错的私人关系,因此商人总是会让Alice先报价。现在请问,在Alice和Bob都用最优策略的情况下,谁能买到更多钻石?假设双方都知道对方手中的现金数量,以及商人将要拍卖的钻石数量 N。
输入
输入文件包含多组测试数据。
第一行,给出一个整数T,为数据组数。接下来依次给出每组测试数据。
每组数据为三个用空格隔开的整数 N,CA,CB,表示钻石的数量,以及双方带的现金数量。
输出
对于每组测试数据,输出一行"Case #X: Y",其中X表示测试数据编号,Y的取值为{-1, 0, 1},-1表示Alice买到的钻石会比Bob少,0表示两人能买到一样多,1表示Alice能买到更多钻石。所有数据按读入顺序从1开始编号。
数据范围
1 ≤ T ≤ 1000

小数据:0 ≤ N ≤ 10; 0 < CA, CB ≤ 10
大数据:0 ≤ N ≤ 105; 0 < CA, CB ≤ 106

样例输入

2

4 3 5

7 4 7

样例输出

Case #1: 0

Case #2: 1

相似字符串

时间限制: 4000ms 内存限制: 256MB

描述

对于两个长度相等的字符串,我们定义其距离为对应位置不同的字符数量,同时我们认为距离越近的字符串越相似。例如,“0123”和“0000”的距离为 3,“0123”和“0213”的距离则为 2,所以与“0000”相比,“0213”和“0123”最相似。
现在给定两个字符串 S1 和 S2,其中 S2 的长度不大于 S1。请在 S1 中寻找一个与 S2 长度相同的子串,使得距离最小。
输入
输入包括多组数据。第一行是整数 T,表示有多少组测试数据。每组测试数据恰好占两行,第一行为字符串 S1,第二行为 S2。所有字符串都只包括“0”到“9”的字符。
输出
对于每组测试数据,单独输出一行“Case #c: d”。其中,c 表示测试数据的编号(从 1 开始),d 表示找到的子串的最小距离。
数据范围
1 ≤ T ≤ 100
小数据:字符串长度不超过 1000
大数据:字符串长度不超过 50000

样例输入

3

0123456789

321

010203040506070809

404

20121221

211

样例输出

Case #1: 2

Case #2: 1

Case #3: 1

仙剑5前传之璇光殿

时间限制: 4000ms 内存限制: 256MB

描述

仙剑是一款经典的RPG游戏,最近又推出了仙剑5前传。Alice身为忠实的仙剑粉丝,当然是在第一时间就开始玩了。迷宫以及各类小游戏是仙剑系列的一大传统,这次也不例外。而且还增加了称号系统,玩家如果在满足一定条件下通过迷宫或是完成小游戏,都可以获得相应的称号奖励。Alice虽然智商也不算太低,顺利的完成游戏还是没什么问题的,但是某些称号对于她来说好像就比较困难,所以她来找你帮忙。
在这个迷宫中,有很多魔法台需要关闭,也有很多宝箱可以捡。你最主要的目标就是关闭所有的魔法台,一旦所有魔法台都被关闭后,立刻通关。这个迷宫中有两个称号可以获得,一个要求拣到所有的宝箱,另一个要求在一定时间内完成。
为了让迷宫变得更加复杂,迷宫中还有两种特殊的法阵。第一种法阵是加速阵,可以瞬间使玩家的移动速度提高5m/s(初始速度为30m/s)。第二种是五灵阵,玩家必须按照五灵相克相生的关系来选择开启适当的阵法才可顺利通过。若玩家顺利通过五灵阵,则也可获得5m/s的速度提升,反之,用户则会被困在原地5秒钟。幸运的是,Alice在网上找到了攻略,所以在通过五灵阵时,她只需要查看一下即可保证顺利通过。不过介于她的思考速度,她需要3秒钟来查看攻略。
Alice想知道如果她想要拣到所有的宝箱,那么最快多长时间能够通过这个迷宫呢?
输入
输入数据的第一行包含一个整数 T,表示数据组数。
接下来有 T 组数据,每组数据中:
第一行包含两个整数 N, M,表示迷宫中节点个数以及边数。节点由 1 到 N 标号。
接下来的 M 行每行包含三个整数 a, b, len,表示节点 a 和节点 b 之间有一条长度为 len 米的路。
接下来的一行包含一个整数 NM,表示魔法台的个数。下一行 NM 个整数,表示魔法台所在的节点编号。
接下来的一行包含一个整数 NT,表示宝箱的个数。下一行 NT 个整数,表示宝箱所在的节点编号。
接下来的一行包含一个整数 NS,表示加速阵的个数。下一行 NS 个整数,表示加速阵所在的节点编号。
接下来的一行包含一个整数 NR,表示五灵阵的个数。下一行 NR 个整数,表示五灵阵所在的节点编号。
最后一行包含一个整数 S,表示玩家的出发节点编号。

输出

对于每组数据,输出一行"Case #X: Y",其中 X 为数据组数编号,从 1 开始,Y 为通过该迷宫的最短时间,四舍五入保留5位小数。
数据范围
1 ≤ T ≤ 10
0 ≤ len ≤ 1000
小数据:
1 ≤ N ≤ 30
0 ≤ M ≤ 200
1 ≤ NM ≤ 3
0 ≤ NT, NS, NR ≤ 3
大数据:
1 ≤ N ≤ 100
0 ≤ M ≤ 2000
1 ≤ NM ≤ 4
0 ≤ NT, NS, NR ≤ 4
提示
1. 每个节点上至多有一个特殊的物品。
2. 当你经过魔法台,加速阵以及宝箱时,可以选择不触发它。
3. 每个法阵都是一次性的,不会被多次触发。

样例输入

2

2 1

1 2 30

1

2

0

0

0

1

3 2

1 2 100

2 3 100

1

3

0

0

1

21

样例输出

Case #1: 1.00000

Case #2: 9.19048

请允许我说一句,微软高端仙剑黑!!!

[查看全文]
terry182
[來做題咯]大家快來做題,不難的說
展开Biu

本帖最后由 terry182 于 2013-4-11 19:47 编辑

因為是今天比賽的題目,於是只能自己憑記憶打出來,有什麼不清楚的見諒啊

1. 數字配對

輸入N個數字,然後輸入一個S,接下來有N個數字,能夠和另外一個在給出的數字中找到一個加起來等於S的數,就視為已配對,可以重復配對

輸入: 第一行是 N和 S

接下來有一行,有N個數字

輸出:對於每個位置的數字,要是已配對,輸出1,沒配對的話輸出0,不可用空格隔開

範例:

輸入:

7 10

8 -2 6 4 5 9 1

輸出:

0011011

2. 畫鬼腳

有N條直線,K個橫線,起點和終點都順序標好了1~N ,請計算出每個起點所到達的終點( 2<N < 10,000) ( 1<K < 10,000,000)

輸入: 第一行是 N 和K

接下來有K行,每行一個數字 H ,表示 H 和H+1間的橫線 (按上下順序)

輸出: 第一行是 N ,這可以從輸入得到

然後按起點1~N ,輸出每個起點所到達的終點,並且換行。

小弟不才,忘了範例了。而且我只能想出O(NK)的..

[查看全文]
weeken2013
错错错求改错【第二集续】Orz
展开Biu

[mw_shl_code=c,true]#include<stdio.h>

#include<stdlib.h>

#include"point.h"

#include<stdbool.h>

struct TreereeNode{

int dim,index;

bool left,right;

}tree[MAXN];

int sortDimension;

int compare(const void *a,const void *b){

struct Point *aa=(Point *)a;

struct Point *bb=(Point *)b;

return(((aa->p[sortDimension])>(bb->p[sortDimension]))?-1:1);

}[/mw_shl_code]

buildTree.c: In function ‘compare’:

buildTree.c:12: error: ‘Point’ undeclared (first use in this function)

buildTree.c:12: error: (Each undeclared identifier is reported only once

buildTree.c:12: error: for each function it appears in.)

buildTree.c:12: error: expected expression before ‘)’ token

buildTree.c:13: error: expected expression before ‘)’ token

这compare问题在哪~Point前边point.h已经有了,具体如下:

struct Point

{

int p[MAXK];

}point[MAXN],searchPoint;

int pointSet[16][MAXN];

int pointNumber[16];

大神啊!!来喷我吧!!

[查看全文]
汝欠咱的一生
尼玛。受不了了。Presentation Error。都试了3次了。求差错。
展开Biu

本帖最后由 汝欠咱的一生 于 2013-4-9 09:11 编辑

Input:第一行是一个整数N,表示数据的组数。

每组数据占一行,代表四张卡片上的数字(保证四个数字都不同,且0<数字<10)。

Output:对每组卡片按从小到大的顺序输出所有能由这四张卡片组成的4位数,千位数字相同的在同一行。

同一行中每个四位数间用空格分隔,每组输出数据间空一行,最后一组数据后面没有空行。

Sample Input:

2

1 2 3 4

1 2 3 5

Sample Output:

1234 1243 1324 1342 1423 1432

2134 2143 2314 2341 2413 2431

3124 3142 3214 3241 3412 3421

4123 4132 4213 4231 4312 4321

1235 1253 1325 1352 1523 1532

2135 2153 2315 2351 2513 2531

3125 3152 3215 3251 3512 3521

5123 5132 5213 5231 5312 5321

啊啊。尼玛。貌似很简单的题啊!#7131!

就是不能AC啊。Presentation Error。可是格式没有不对啊。。。[mw_shl_code=c,true]#include<stdio.h>

#define max 1001

int main()

{

int n,i,a,b,c,d,x[max];

int j;

scanf("%d",&n);

for(j=0;j<n;j++)

{

for(i=0;i<4;i++)

{

scanf("%d",&x);

}

i=0;

for(a=0;a<4;a++)

{

for(b=0;b<4;b++)

{

if(b==a)continue;

for(c=0;c<4;c++)

{

if(c==b||c==a)continue;

for(d=0;d<4;d++)

{

if(d==c||d==b||d==a)continue;

printf("%d%d%d%d",x[a],x,x[c],x[d]);

i++;

if(i%6!=0) printf(" ");

if(i%6==0&&a!=3) printf("\n");

}

}

}

}

if(j!=n-1)

printf("\n\n");

}

}

[/mw_shl_code]

[查看全文]