今天做了顶嵌杯C语言大赛的初赛的题,5题里做了3题,其实要真认真做应该都能做出来,但是觉得有点累,所以只做了3道,明天继续吧。今天做的3道是B,C,E,感觉都蛮有意思的,废话不多说了,还是说题吧。B题就不多说了,真的很简单,就是要注意的一点问题是读字符串时最好用gets(),用scanf()得处理空格,我网上查的一种办法但貌似不行,gets()还是蛮好用的。C题我是用单链表做的,准确的是循环单链表,考虑到链表在处理出队的小孩这点上比数组有优势,删了就没了,感觉比数组要好,这题的方法应该很多的,初赛的题不能测速度和内存,所以我也不知道我的这个算法到底好不好。E题就是一个大循环,然后就是n多的条件判断,还是同样不知道算法的好坏(-_-!),这道题恶心的是输出格式的问题,每个字母前有三个空格,下面是我的代码:
B题:
#include "stdio.h"
#include "string.h"
char message[100][201];
void deal(char t[201]){
int i;
for(i=0;t[i]!='/0';i++){
if(t[i]>='A'&&t[i]<='Z'){
if(t[i]-5<'A'){
t[i]=t[i]+21;
}else{
t[i]=t[i]-5;
}
}
}
}
int main(){
int i,j;
char tmp[201];
j=0;i=1;
gets(tmp);
while(strcmp(tmp,"ENDOFINPUT")!=0){
if(i%3!=2){
gets(tmp);
i++;
continue;
}else{
deal(tmp);
strcpy(message[j],tmp);
i++;
j++;
gets(tmp);
}
}
for(i=0;i<j;i++){
printf("%s/n",message[i]);
}
return 0;
}
C题:
#include "stdio.h"
#include "stdlib.h"
typedef struct s{
char name[16];
struct s *next;
}CH;
int main(){
int i,number,w,s;
CH *p,*pre,*head,*tmp;
scanf("%d",&number);
for(i=0;i<number;i++){
p=(CH*)malloc(sizeof(CH));
scanf("%s",p->name);
if(i==0){
head = p;
pre = p;
}else if(i==number-1){
pre->next = p;
p->next = head;
}else{
pre->next = p;
pre = p;
}
}
scanf("%d,%d",&w,&s);
pre = p;
p=head;
for(i=1;i<w+s-1;i++){
pre = p;
p=p->next;
}
printf("%s/n",p->name);
tmp = p;
pre->next = p->next;
p=p->next;
free(tmp);
while(p->next!=p){
for(i=1;i<s;i++){
pre = p;
p=p->next;
}
printf("%s/n",p->name);
tmp = p;
pre->next = p->next;
p=p->next;
free(tmp);
}
printf("%s/n",p->name);
return 0;
}
E题:
#include "stdio.h"
char a[50][50];
int main(){
int m,n,num,i,j,fline,lline,fcoloum,lcoloum,flag;
scanf("%d %d",&m,&n);
num=1;
flag=1;
i=j=1;
fline=fcoloum=1;
lline=m;
lcoloum=n;
while(num<=m*n){
a[i][j]='A'+(num-1)%26;
num++;
if(i==fline&&flag==1){
if(j==lcoloum){
fline++;
i++;
flag=2;
}else {
j++;
}
}else if(j==lcoloum&&flag==2){
if(i==lline){
lcoloum--;
j--;
flag=3;
}else{
i++;
}
}else if(i==lline&&flag==3){
if(j==fcoloum){
lline--;
i--;
flag=4;
}else{
j--;
}
}else if(j==fcoloum&&flag==4){
if(i==fline){
fcoloum++;
j++;
flag=1;
}else{
i--;
}
}
}
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
printf(" %c",a[i][j]);
}
printf("/n");
}
return 0;
}