2012北邮网研院上机题

来源:互联网 发布:淘宝购物流程图片 编辑:程序博客网 时间:2024/06/07 10:51

A 打印字符串
时间限制 1000 ms 内存限制 65536 KB
题目描述
老师有一个问题想考考mabo,但是mabo不会,所以想请你来帮帮忙。

问题如下:

给一串字符串,统计其中某个字符的个数。

输入格式
首先输入一个整数T,表示一共有T组数据 0<T<=10。

接下来每行一个字母x(x为’a’-‘z’或者‘A’-‘Z’)。

然后下面一行输入一个字符串s(0<s的长度<1000)。

输出格式
统计这个字母在这个字符串中出现的次数

输入样例
2
a
absd
b
bbssb
输出样例
1
3
  思路:略。

#include<stdio.h>int main() {    int T;    scanf("%d",&T);    while(T--) {        char ch[2];        char s[1000];        scanf("%s",ch);        scanf("%s",s);        int i = 0,num = 0;        while(s[i]) {            if(s[i] == ch[0]) {                num++;            }            i++;        }        printf("%d\n",num);    }}

B 二叉树的层数
时间限制 1000 ms 内存限制 65536 KB
题目描述
老师有一个问题想考考mabo,但是mabo不会,所以想请你来帮帮忙。

问题如下:

给一个二叉树

请把这个棵二叉树按层来打印。如果为相同层,需要从左到右打印。一个节点是先添加左节点后添加右节点,即添加顺序与输入顺序一致。

输入格式
首先输入一个整数T,表示一共有T组数据 0<T<=10

再输入两个整数N,M(0<=N,M<=100)

表示下面有N行,这个树有M个节点(1号节点是这棵树的根节点)

每一行两个整数a,b(1<=a,b<=M)

表示节点a的父亲是节点b

输出格式
对于每组

先输出一行 “Qi:”表示第i个问题

然后接下来输出每个问题二叉树每层的节点,在同一层的节点用空格分开,同一层输出在一行(每一行末尾没有空格),不同的层输出在不同行(入下面Sample Ouput所示)

输入样例
2
4 5
2 1
3 1
4 2
5 4
1 2
2 1
输出样例
Q1:
1
2 3
4
5
Q2:
1
2
  思路:队列实现二叉树的层次遍历

#include<stdio.h>#include<queue>using namespace std;struct Node {    int ID,depth;    Node *lchild;    Node *rchild;}tree[101];int main() {    int T;    scanf("%d",&T);    int t = T;    while(T--) {        int N,M;        scanf("%d%d",&N,&M);        for(int i = 1;i <= M;i++) {            tree[i].ID = i;            tree[i].depth = 0;            tree[i].lchild = NULL;            tree[i].rchild = NULL;        }         tree[1].depth = 1;        while(N--) {            int a,b;            scanf("%d%d",&a,&b);            if(!tree[b].lchild) {                tree[b].lchild = &tree[a];            } else {                tree[b].rchild = &tree[a];            }            tree[a].depth = tree[b].depth + 1;           }        printf("Q%d:",t - T);        queue<Node *> Q;        Q.push(&tree[1]);        int level = 0;        Node *temp;        bool flag = false;        while(!Q.empty()) {            temp = Q.front();            Q.pop();            if(temp->depth == level) {                printf(" %d",temp->ID);               } else {                level++;                printf("\n%d",temp->ID);              }            if(temp->lchild) {                Q.push(temp->lchild);            }            if(temp->rchild) {                Q.push(temp->rchild);            }        }        printf("\n");    }}

C IP地址
时间限制 1000 ms 内存限制 65536 KB
题目描述
我们都学过计算机网络,了解IPV4地址的点分十进制表示法。

你的任务很简单:判断一个字符串是否是一个合法的点分十进制表示的IPV4地址。

最低的IP地址是0.0.0.0,最高的IP地址是255.255.255.255。

PS :方便起见,认为形似00.00.00.00的IP地址也是合法的。

输入格式
第一行是一个整数T,代表输入还剩下T行

以下的T行,每行都是一个字符串(不含空白字符)。字符串的长度保证不超过15,不小于1.

输出格式
对于每个字符串,输出一行。

如果它是一个合法的IPV4地址,输出Yes。

否则,输出No。

输入样例
3
59.64.130.18
f.a.t.e
1.23.45.678
输出样例
Yes
No
No
  思路:参考了网上的代码,sscanf用的好,能大大简化问题。

#include<stdio.h>int main() {    int T;    scanf("%d",&T);    char s[16];    while(T--) {        scanf("%s",s);        int a,b,c,d,e;        if(sscanf(s,"%d.%d.%d.%d%c",&a,&b,&c,&d,&e) == 4) {            if(a >= 0 && a <= 255 && b >= 0 && b <= 255 && c >= 0 && c <= 255             && d >= 0 && d <= 255) {                    printf("Yes\n");            } else {                printf("No\n");            }        } else {            printf("No\n");        }    }}

D. 最远距离
时间限制 1000 ms 内存限制 65536 KB
题目描述
正义的伙伴褋祈和葬仪社的机器人Fuyuneru正在被邪恶的GHQ部队追杀。眼看着快要逃不掉了,祈就把重要的东西塞到了机器人体内,让它先跑,自己吸引火力。

假设Fuyuneru带上东西开始逃跑时所处的点为原点,朝向为正北。操纵FuyuNeru的指令有如下四种:

right X: X是1-359之间的整数,Fuyuneru的前进方向顺时针转X度。

left X: X是1-359之间的整数,Fuyuneru的前进方向逆时针转X度。

forward X: X是整数(0<=X<=1000),Fuyuneru向当前朝向前进X米。

backward X: X是整数(0<=X<=1000),Fuyuneru向当前朝向后退X米。

现在祈向Fuyuneru体内输入了N(1<=N<=50)个这样的指令。可是由于此前Fuyuneru被GHQ部队击中,它出了一点小问题:这N个指令执行的顺序是不确定的。

问:Fuyuneru最远可能逃出多远?

即,Fuyuneru在执行完N条指令之后,距离原点最远的可能距离是多少?

输入格式
第一行是一个整数T,代表测试数据有T组。

每组测试数据中,第一行是一个整数N,代表指令有N条;

随后紧跟N行,每一行代表一个指令(格式保证是上述四种中的一种,数据保证合法)

输出格式
对于每组数据,输出一行:最远的可能逃亡距离,精确到小数点后3位。

输入样例
3
3
forward 100
backward 100
left 90
4
left 45
forward 100
right 45
forward 100
6
left 10
forward 40
right 30
left 10
backward 4
forward 4
输出样例
141.421
200.000
40.585
  思路:应该是用动态规划来解的,目前没时间,以后再写吧。。。

0 0
原创粉丝点击