笔试题(三)
笔试题(三)
题目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;
}