笔试题(三)

题目1 12进制

12进制与十进制的字符对应如下:
十进制0~9分别对应十二进制的0~9;
字符‘A’对应十二进制的10;
字符‘B’对应十二进制的11。
输入一个十进制数,输出其12进制表示。
输入样例

 13

输出样例

11

程序代码:

#include<stdio.h>
#include<string.h>
char c[1000];
int main()
{
    int n;
    scanf("%d",&n);
    int i=0;
    int tmp;
    if(n==0)
        putchar('0');
    while(n)
    {
        tmp = n%12;
        if(tmp==10)
            c[i]='A';
        else if(tmp==11)
            c[i]='B';
        else
            c[i]=tmp+'0';
        i++;
        n=n/12;
    }
    c[i]='\0';
    int len= strlen(c);
    for(i=len-1;i>=0;i--)
    {
        putchar(c[i]);
    }
    return 0;
}

题目2 筛选重复的字符串

输入字符串长度和一个字符串,剔除字符串中连续的重复字符(包括空格)然后输出
输入样例

6,abbccc   //输出字符串长度和字符串,中间以逗号分隔

输出样例

abc

程序代码:

int main()
{
    int len;
    scanf("%d,",&len);
    int i,j;
    for(i=0;i<len;i++)  
    {
        scanf("%c",&a[i]);
    }
    b[0]=a[0];
    j=0;
    for(i=1;i<len;i++)
    {
        if(a[i]==b[j])
            ;
        else
            b[++j]=a[i];
    }
    len = strlen(b);
    for(i=0;i<len;i++)
        putchar(b[i]);
    return 0;
}

题目3 最小长方形

输入包含对个测试用例,输入一系列点的坐标,每个输入以(0,0)结束,输出最小长方形的左下角和右上角坐标,该长方形包含输入的所有点,长方形的边分别平行于x轴和y轴。整个输入以(0,0)结束,如果输出为一条线或者一个点,则不输出。
输入样例

1 1
2 2
0 0   //第一个输入结束
1 2
2 3
3 4
0 0   //第二个输入结束
0 0   //结束输入

输出样例

1 1 2 2 
1 2 3 4

程序代码:

#include<stdio.h>
int min(int a[],int len);
int max(int a[],int len);
int x[1000];
int y[1000];
int res[4000];
int main()
{
    int minX,minY,maxX,maxY,len;
    int i=0,cnt=0;
    while(1)
    {
        len=save(x,y);
        if(len ==0)
            break;
        else
            minX=min(x,len);
            minY=min(y,len);
            maxX=max(x,len);
            maxY=max(y,len);
            if(minX!=maxX&&minY!=maxY)
            {
                res[i]=minX;
                res[i+1]=minY;
                res[i+2]=maxX;
                res[i+3]=maxY;
                i+=4;
                cnt++;
            }

    }
    i=0;
    while(cnt)
    {
        printf("%d %d %d %d\n",res[i],res[i+1],res[i+2],res[i+3]);
        i+=4;
        cnt--;
    }
    return 0;

}
int save(int x[],int y[])
{
    int i=0;
    int a,b;
    scanf("%d%d",&a,&b);
    while(a!=0||b!=0)
    {
        x[i]=a;
        y[i]=b;
        i++;
        scanf("%d%d",&a,&b);
    }
    return i;
}
int min(int a[],int len)
{
    int i;
    int m = a[0];
    for(i=1;i<len;i++)
    {
        if(a[i]<m)
            m=a[i];
    }
    return m;
}
int max(int a[],int len)
{
    int i;
    int m = a[0];
    for(i=1;i<len;i++)
    {
        if(a[i]>m)
            m=a[i];
    }
    return m;
}