487-3279的解法实例

//解法1
#include<iostream>
#include<string>
using namespace std;
int convert(char a)
{
    int flag=-1;
    if(a==‘A‘||a==‘B‘||a==‘C‘||a==‘2‘)
    flag=2;
    if(a==‘D‘||a==‘E‘||a==‘F‘||a==‘3‘)
    flag=3;
    if(a==‘G‘||a==‘H‘||a==‘I‘||a==‘4‘)
    flag=4;
    if(a==‘J‘||a==‘K‘||a==‘L‘||a==‘5‘)
    flag=5;
    if(a==‘M‘||a==‘N‘||a==‘O‘||a==‘6‘)
    flag=6;
    if(a==‘P‘||a==‘R‘||a==‘S‘||a==‘7‘)
    flag=7;
    if(a==‘T‘||a==‘U‘||a==‘V‘||a==‘8‘)
    flag=8;
    if(a==‘W‘||a==‘X‘||a==‘Y‘||a==‘9‘)
    flag=9;
    if(a==‘1‘)
    flag=1;
    if(a==‘0‘)
    flag=0;
    return flag;
}
char convert1(int a)
{
    char f;

    if(a==0)
        f=‘0‘;
    if(a==1)
        f=‘1‘;

    if(a==2)
        f=‘2‘;

    if(a==3)
        f=‘3‘;

    if(a==4)
        f=‘4‘;

    if(a==5)
        f=‘5‘;

    if(a==6)
        f=‘6‘;

    if(a==7)
        f=‘7‘;

    if(a==8)
        f=‘8‘;

    if(a==9)
        f=‘9‘;
    return f;
}
int main()
{
    string s;
    int p,q;
    string temp;
    int temp1;
    string a[10000];
    for(p=0;p<10000;p++)
        a[p]="";
    int sum;
    cin>>sum;
    int count=0;
    for(int i=0;i<sum;i++)
    {
        cin>>s;
        int j;
        int count1=0;
        for(j=0;j<s.length();j++)
        {
            temp1=convert(s[j]);
            if(temp1!=-1)
            {
                if(count1==3)
                {
                a[count]=a[count]+‘-‘;
                count1++;
                }
                a[count]=a[count]+convert1(temp1);
                count1++;
            }
        }
        count++;
    }
    int w[10000];
    string b[10000];
    int c[10000];
    for(int i=0;i<10000;i++)
    b[i]="";
    for(int i=0;i<count;i++)
    w[i]=1;
    int u=0;
for(int i=0;i<count;i++)
{
    if(w[i]==1)
    {
        int count2=1;
        for(int j=i+1;j<count;j++)
        {
            if(a[i]==a[j])
            {
            w[j]=0;
            count2++;
            }
        }
        if(count2>1)
        {
            b[u]=a[i];
            c[u]=count2;
            u++;
        }
    }
}
    int d[100000];
    for(int z=0;z<u;z++)
    {
        d[z]=convert(b[z][0]);
    }
    int min;
    int y=0;
    for(int r=0;r<u;r++)
    {
    min=d[y];
    for(int z=0;z<u;z++)
    {
        if(d[z]<min)
        {
            min=d[z];
            y=z;
        }
    }
    cout<<b[y]<<" "<<c[y]<<endl;
    d[y]=100000;
    }
return 0;
}

//解法2

#include <iostream>
#include <map>
#include <string>

using namespace std;

int main()
{
    char szNumMap[] = "22233344455566670778889990";
    map<string,int> mResultMap;
    string strInputTemp;
    string strResult;
    int nCaseCount = 0;
    cin >> nCaseCount;
    while( nCaseCount > 0 )
    {
        cin >> strInputTemp;
        strResult.clear();
        for( string::size_type i = 0; i < strInputTemp.size(); ++i )
        {
            if ( strInputTemp[i] == ‘-‘ )   continue;
            if ( isdigit( strInputTemp[i] ) )
            {
                strResult += strInputTemp[i];
            }
            else
            {
                strResult += szNumMap[strInputTemp[i]-‘A‘];
            }
        }
        strResult.insert( 3, 1, ‘-‘ );
        mResultMap[strResult]++;

        --nCaseCount;
    }

    bool bRepeat = false;
    for ( map<string,int>::const_iterator it = mResultMap.begin();
        it != mResultMap.end(); ++it )
    {
        if ( it->second > 1 )
        {
            cout << it->first << " " << it->second << endl;
            bRepeat = true;
        }
    }
    if ( !bRepeat )
    {
        cout << "No duplicates." << endl;
    }

    return 0;
}

//解法3
typedef struct
{
    int identy;
    char str[9];
    int icount;
}Phone;
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100000
int cmp(const void *a, const void *b)
{
    int *x = (int *)a;
    int *y = (int *)b;
    return (*x) - (*y);
}
int main()
{
    int cnt = 0;   //存放电话号码个数
    int iter = 0;
    int Noduplicates = 0;  //有无重复号码的标志,为0则表示无重复
    int Sum = 0;
    int icount = 0;
    char ch;      // 接收键盘输入字符
    int *PHONE = (int *)malloc(sizeof(int) * (MAXSIZE + 10));
    scanf("%d",&cnt);
    getchar();

    //获取所有电话号码,转换为整型数据
    for(iter = 0; iter < cnt; iter++)
    {
        Sum = 0;
        ch = getchar();
        while(ch != ‘\n‘)
        {
            if(ch >= ‘0‘ && ch <= ‘9‘)
            {
                Sum = Sum * 10 + ch - ‘0‘ ;
            }
            else if(ch >= ‘A‘ && ch <= ‘P‘)
            {
                Sum = Sum * 10 + (ch - 65) / 3 + 2 ;
            }
            else if(ch >= ‘R‘ && ch <= ‘Y‘)
            {
                Sum = Sum * 10 + (ch - 66) / 3 + 2 ;
            }
            ch = getchar();
        }
        PHONE[iter] = Sum;
    }

    //用快排对电话号码排序
    qsort(PHONE, cnt, sizeof(int), cmp);

    //输出排好顺序的号码
    for(iter = 0, icount = 1; iter < cnt - 1 ; iter++)
    {
        icount = 1;
        //统计重复号码个数
        while(PHONE[iter] == PHONE[iter + 1])
        {
            iter++;
            icount++;
        }
        if(icount > 1)
        {
            Noduplicates = 1;
            printf("%03d-%04d %d\n",PHONE[iter] / 10000 ,PHONE[iter] % 10000 ,icount);
        }
    }
    if(Noduplicates == 0)
    {
        printf("No duplicates.\n");
    }
    getchar();
    return 0;
}
//解法4

#include<stdio.h>
#include<string.h>
#include <stdlib.h>
int cmp(const void *a, const void *b){
    return(*(int *)a-*(int *)b);
    }
int main(){
    char str[100];
    int num[26]={2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 0, 7, 7, 8, 8, 8, 9, 9, 9, 0};
    int n, a[100005], l, sum, i, k, flag, t, s, j, p;
    scanf("%d", &n);
    getchar();
    k = 0;
    while (k!=n){
        gets(str);
        l = strlen(str);
        sum = 0;
        for (i=0; i<l; i++){
            if (str[i]>= ‘0‘ && str[i] <= ‘9‘){
                sum = sum*10 + str[i]-‘1‘+1;
                continue;
            }
            if (str[i]>=‘A‘ && str[i]<=‘Z‘){
                if (str[i] == ‘Q‘ || str[i] == ‘Z‘) continue;
                sum = sum * 10 + num[str[i]-‘A‘];
            }
        }
        a[k] = sum;
        k++;
    }
    a[k] = -1;
    qsort(a, k, sizeof(a[0]), cmp);
    t = a[0];
    flag = 0;
    i = 1;
    s = 1;
    while (i!=k+1){
        if (t == a[i]){
            s++;
            flag = 1;
        }else {
            if (s>1){
                p = 1000000;
                for(j=1; j<=3; j++){
                    printf("%d", t/p);
                    t = t%p;
                    p = p/10;
                }
                printf("-");

                p = 1000;
                for (j=1; j<=4; j++){
                    printf("%d", t/p);
                    t = t%p;
                    p = p/10;
                }
                printf(" %d\n", s);
            }
            t = a[i];
            s=1;
        }
        i++;
    }
    if (flag == 0){
        printf("No duplicates.\n");
    }
    return 0;
}

  

时间: 2024-08-09 21:48:54

487-3279的解法实例的相关文章

Linear regression with multiple variables(多特征的线型回归)算法实例_梯度下降解法(Gradient DesentMulti)以及正规方程解法(Normal Equation)

%第一列为 size of House(feet^2),第二列为 number of bedroom,第三列为 price of House 1 2104,3,399900 2 1600,3,329900 3 2400,3,369000 4 1416,2,232000 5 3000,4,539900 6 1985,4,299900 7 1534,3,314900 8 1427,3,198999 9 1380,3,212000 10 1494,3,242500 11 1940,4,239999 1

关于JS递归函数细化认识及实用实例

程序调用自身的编程技巧称为递归( recursion). 一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量.递归的能力在于用有限的语句来定义对象的无限集合.用递归思想写出的程序往往十分简洁易懂. 一般来说,递归需要有边界条件.递归前进段和递归返回段.当边界条件不满足时,递归前进:当边界条件满足时,递归返回. 注意: (1)

【POJ 3279 Fliptile】开关问题,模拟

题目链接:http://poj.org/problem?id=3279 题意:给定一个n*m的坐标方格,每个位置为黑色或白色.现有如下翻转规则:每翻转一个位置的颜色,与其四连通的位置都会被翻转,但注意只扩散一圈,不是连锁反应. 求最少翻转几个位置能够使所有n*m个位置都变为白色.若有解,求字典序最小的翻转方案(给出每个位置的翻转次数). 数据范围:n, m 属于 [1, 15] 思路:我们把翻转方案中的翻转称为“主动翻转”,翻转过程中受邻居影响而发生的翻转称为“被动翻转”.观察例子可得出如下几个

关于二阶齐次差分方程的MATLAB解法

看PDF的截图,凑活看吧 之后举个MATLAB的实例 解 X(K+2)+3X(K+1)+2X(K)=0 其中X(0)=0,X(1)=1 clc,clearsyms a k yka=[0 1;-2 -3]; a=sym(a);%a来自于上面截图中的A,将二阶转化为一阶的那个系数 [vec,val]=eig(a);y0=[0;1];yk=vec*val.^k*inv(vec)*y0 关于二阶齐次差分方程的MATLAB解法,布布扣,bubuko.com

DIV + CSS综合实例【传智PHP首页】

1.首页结构 2.准备工作 所有素材放到与当前网页同级的目录下: 网页背景色.背景图: 主页宽度:1000px: 创建CSS文件,将CSS文件引入到当前的HTML文件中. 3.实现 效果图: 源代码: HTML代码: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&

算法笔记_001:斐波那契数的多种解法

本篇文章解决的问题来源于算法设计与分析课程的课堂作业,主要是运用多种方法来计算斐波那契数.具体问题及解法如下: 一.问题1: 问题描述:利用迭代算法寻找不超过编程环境能够支持的最大整数的斐波那契数是第几个斐波那契数.(Java: 231-1 for int, 263-1 for long) 解决方案:针对问题1,此处要使用迭代法来解决,具体实现代码如下: //用迭代法寻找编程环境支持的最大整数(int型)的斐波那契数是第几个斐波那契数 public static int max_int_iter

Spring+EhCache缓存实例(详细讲解+源码下载)(转)

一.ehcahe的介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存,Java EE和轻量级容器.它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点. 优点: 1. 快速 2. 简单 3. 多种缓存策略 4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题 

插件实例修改2

这个是根据前面一篇项目作出修改,那个增加的页面都是列表页面 配置文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <xp-web> 3 <modules> 4 <!-- 第三方APP服务端 --> 5 <module path="/web/plugins/bs/yygl/bz/extapp" form="" scope="

插件实例修改3

根据我前2篇项目,又做了更新,把3tab页面合成一个页面,主要用到easyui 页面布局 配置文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <xp-web> 3 <modules> 4 <!-- 第三方APP服务端 --> 5 <module path="/web/plugins/bs/yygl/bz/extapp" form="&quo