poj 1002之我见

来源:互联网 发布:福莱软件介绍 编辑:程序博客网 时间:2024/04/29 19:36

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
//出现Runtime Error可能原因是分配的局部的数组空间不够,之运行中出现此类错误
//使用每加入一个都计数的方式可能会导致Time Limit Exceeded
//最好使用一次排序并且一次遍历计数的方式
//q没有映射,暂记为1
char map[]={'2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7','7','7','7','8','8','8','9','9','9','9'};
//struct N{
// int data;
// int times;
//};
int nums[100005];

int cmp(const void *n1,const void *n2){
 return *(int *)n1 - *(int *)n2;
}                
int main(){
 int num;
 scanf("%d",&num);

 for(int i=0;i<num;i++){
  int now=0;
  char worknum[256];
  scanf("%s",&worknum);
  int index=0;//写入指针index4为扫描指针
  for(int index4=0;index4<strlen(worknum);index4++){
   if(worknum[index4]>='A'&&worknum[index4]<='Z'){
    worknum[index]=map[worknum[index4]-'A'];
    index++;
   }
   else if(worknum[index4]>='0'&&worknum[index4]<='9'){
    worknum[index]=worknum[index4];
    index++;
   }
   else
    continue;
  }
  worknum[index]='\0';
  //使用将字符创数字转化为int行的函数,一定要熟练。
  now=atoi(worknum);
  nums[i]=now;
  //查找有没有now
  //bool flag=false;
  //for(int j=0;j<=index2;j++){
  // if(nums[j].data==now){
  //  nums[j].times++;
  //  flag=true;
  // }
  //}
  //if(!flag){
  // index2++;
  // nums[index2].data=now;
  // nums[index2].times=1;
  //}
 }
 qsort(nums,num,sizeof(int),cmp);
 int dup=0;
 int count=1;
 for(int k=0;k<num;k++){
  if(nums[k]==nums[k+1]){
   count++;
  }
  else{
   if(count!=1){
    dup++;
    int head=nums[k]/10000;
    int tail=nums[k]%10000;
    printf("%03d-%04d %d\n",head,tail,count);
    count=1;
   }
  }
 }
 if(dup==0)
  printf("No duplicates.\n");
 return 0;
}

原创粉丝点击