POJ 1002

本文介绍了一道名为POJ1002的编程题的解题思路及实现代码。题目要求处理一系列由字母和数字组成的字符串,将其转换为十进制数值并统计重复出现的数字组合。通过映射表将字母转换为数字,利用排序方法快速查找重复项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

POJ 1002
C:题意 给你一个n。然后后n行。每行一个字符串。字母+数字的个数是7个。-不考虑。如果是字母的话就通过表映射。A-B-C映射
为2…….然后求这n行相同数字的个数。如果相同数字个数>=2就输出出来,并输出个数。
思路;很简单,直接将每一行的7个数字转换为10进制的数,存到数组里。sort一遍。找出相同的个数即可。按照输出的格式再输出即可
,大水题,没时间做了

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<string>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#include<map>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f3f3f3f3f
const int maxn=1e8+9;
#define mem(aa,bb) memset(aa,bb,sizeof(aa))
#define PI acos(-1.0)
char str[1000];
int zz[200];
int num[110000],pos,store[110000];
int main()
{
    int n;
    zz['A']=zz['B']=zz['C']=2;
    zz['D']=zz['E']=zz['F']=3;
    zz['G']=zz['H']=zz['I']=4;
    zz['L']=zz['K']=zz['J']=5;
    zz['M']=zz['N']=zz['O']=6;
    zz['P']=zz['R']=zz['S']=7;
    zz['T']=zz['U']=zz['V']=8;
    zz['W']=zz['X']=zz['Y']=9;

    while(~scanf("%d",&n))
    {
        int len=0;
        pos=0;
        for(int i=0; i<n; i++)
        {
            scanf("%s",str);
            int la=strlen(str);
            int ans=0;
            for(int i=0; i<la; i++)
            {
                if(str[i]>='0'&&str[i]<='9')
                {
                    ans=ans*10+str[i]-'0';
                }
                else if(str[i]>='A'&&str[i]<='Z')
                    ans=ans*10+zz[str[i]];
            }
            num[++pos]=ans;
        }
        int flag=0,sum=1,pos1=0,bh[110000];
        sort(num+1,num+1+pos);
//        for(int i=1;i<=pos;i++)
//        printf("%d\n",num[i]);
        for(int i=2;i<=pos;i++)
        {
            if(num[i]==num[i-1])
            {
                sum++;
                if(sum==2)
                store[++pos1]=num[i];
                bh[pos1]=sum;
            }
            else
            {
                sum=1;
            }
        }
//        for(int i=1;i<=pos1;i++)
//            printf("%d\n",store[i]);
        if(pos1==0) printf("No duplicates.\n");
        else
        {
            int tem[110000];
            for(int i=1;i<=pos1;i++)
            {
//                memset(tem,0,sizeof(tem));
                int qq=7;
                while(store[i])
                {
                    tem[qq]=store[i]%10;
                    store[i]/=10;
                    qq--;
                }
                for(int i=1;i<=7;i++)
                {
                    printf("%d",tem[i]);
                    if(i==3) printf("-");
                }
                printf(" %d\n",bh[i]);
            }
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值