pku前面的题目都是关于输入输出的题目,虽然不难,但是想一次就AC也不是件容易的事情。
1002这道题目涉及输入、转换、排序、格式输出问题。
其中有些技巧:
1。用scanf和printf进行输入输出,比iostream效率高很多,最少一个数量级。
2。进行转换时用到了查表方法,很不错哦……
3。排序不用多说,冒泡肯定不行,效率太低,用STL的sort。
4。边算边输。
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
source code
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int array[200000];//用于存储号码信息,记住一定要开大
char map[] = "22233344455566677778889999";//转换时查表用
memset(array,0,100001);//把array的元素都设为0
char temp[100];//用于接收输入信息
long n,k=0;//n是接收n个号码的个数,k是一个下标
int count=1;//用于计数相同的号码个数,用于判断和输出
bool open=false;//判断是否各个号码都不相同
scanf("%d",&n);//接收个数信息
while(k<n)//接收号码信息和转换操作
{
scanf("%s",temp);
for(int i=0;temp[i];i++)
{
if(temp[i]<='9'&&temp[i]>='0')
{
array[k] = array[k]*10 + temp[i] - '0';
}
else if(temp[i]<'Z'&&temp[i]>='A')
array[k] = array[k]*10 + map[temp[i] - 'A'] - '0';
}
k++;
}
sort(array,array+n);//排序
for(k=0;k<n-1;k++)//输出
{
if(array[k] == array[k+1])
{
open = true;
count++;
}
else if(count!=1)
{
printf("%03d-%04d %d\n",array[k]/10000,array[k]%10000,count);
count = 1;
}
}
if(count!=1)
{
printf("%03d-%04d %d\n",array[k]/10000,array[k]%10000,count);
count = 1;
}
if(open == false)
printf("No duplicates.\n");//无相同号码
return 0;
}