POJ2159

这篇博客详细介绍了POJ2159编程题的解题思路,重点在于如何正确接收输入数据,避免编程错误如冒泡排序的实现,并提醒解题时关注简单统计频率的方法,以此轻松获得AC。

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

POJ2159题解

POJ2159

解题重点在如下几个地方

第一:正确接收来自输入流的数据
第二:懵逼的我居然把冒泡写错了,啊。。。
第三:统计频率就AC了,不要想太复杂

SOURCE

质量

Problem: 2159       User: 20132430222
Memory: 160K        Time: 63MS
Language: C++       Result: Accepted

源码

// 2159.cpp : 定义控制台应用程序的入口点。
//

//#include"stdafx.h"
#include<stdio.h>
#include<stdlib.h>
typedef struct{
    char alphabet;
    int freq;
    }list;
int main(){
    list Encrypted[26]={{'A',0},{'B',0},{'C',0},{'D',0},{'E',0},{'F',0},{'G',0},
                        {'H',0},{'I',0},{'J',0},{'K',0},{'L',0},{'M',0},{'N',0},
                        {'O',0},{'P',0},{'Q',0},{'R',0},{'S',0},{'T',0},
                        {'U',0},{'V',0},{'W',0},{'X',0},{'Y',0},{'Z',0}};
    list Orign[26]={{'A',0},{'B',0},{'C',0},{'D',0},{'E',0},{'F',0},{'G',0},
                        {'H',0},{'I',0},{'J',0},{'K',0},{'L',0},{'M',0},{'N',0},
                        {'O',0},{'P',0},{'Q',0},{'R',0},{'S',0},{'T',0},
                        {'U',0},{'V',0},{'W',0},{'X',0},{'Y',0},{'Z',0}};
    char ch;
    ch = getchar();
    while(ch!='\n'){
        (Encrypted[(ch-'A')].freq)++;
        ch = getchar();
    }
    ch = getchar();
    while(ch!='\n'){
        (Orign[(ch-'A')].freq)++;
        ch = getchar();
    }
    int E[26],O[26];
    int i = 0;
    for(i=0;i<26;i++){
        E[i] = Encrypted[i].freq;
        O[i] = Orign[i].freq;
    }
    int j = 0;
    int k = 0;
    int tmp;
    for(j = 0;j<26;j++){
        for(k = 1;k<(26-j);k++){
            if(E[k]<E[k-1]){
                tmp = E[k-1];
                E[k-1] = E[k];
                E[k] = tmp;
            }
            if(O[k]<O[k-1]){
                tmp = O[k-1];
                O[k-1] = O[k];
                O[k] = tmp;
            }
        }
    } 
    int flag = 0;
    for(i = 25;i>=0;i--){
        if(E[i]!=O[i]){
            flag = 1;
            break;
        }
        if(E[i]==0){
            break;
        }   
    }
    if(flag == 1){
        printf("NO\n");
    }else{
        printf("YES\n");
    }
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值