• 一些编程的小练手


    第一个问题,电报加密问题,代码如下:

    View Code
     1 #include "stdafx.h"
     2 #include <iostream>
     3 #include <string>
     4 using namespace std;
     5 
     6 int _tmain(int argc, _TCHAR* argv[])
     7 {
     8     while(true)
     9     {
    10     string input;
    11     getline(cin,input);//string里面有getline
    12     const char *p=input.c_str();
    13     char *q=new char;
    14     char *q_begin=q;
    15     while(*p!='\0')
    16     {
    17         int temp;
    18         if(*p>='a'&&*p<='z')
    19         {
    20              temp=*p-'a'+1;
    21         }
    22         else if(*p>='A'&&*p<='Z')
    23         {
    24                temp=*p-'A'+27;
    25         }
    26         else
    27         {
    28             return 1;
    29         }
    30         temp=(temp*temp+temp+1)%52;
    31 
    32         if(temp>=27)
    33         {
    34             *q='A'+temp-27;
    35         }
    36         else
    37         {
    38             *q='a'+temp-1;
    39         }
    40         p++;
    41         q++;
    42     }
    43     *q='\0';
    44     string output=q_begin;
    45     printf(q_begin,"%s");
    46     printf("\n");
    47     /*return 0;*/
    48     }
    49     return 0;
    50 }

    弄懂了关于iostream和using namespace std的一点问题,注意iostream等都需要using namespace std才能正确使用cout等函数。

    这里对于控制台程序的输入,是通过string的一个函数getline来做的,它很好的一点就是有'\0',const char *p=input.c_str();这个函数也是带'\0'的。另外一点就是注意字母的ASCII值和真实的int值。

    第二个问题,夫妻相,代码如下:

    View Code
    #include "stdafx.h"
    #include "string.h"
    #define MAX_GIRL_NUM 10
    #define MAX_NAME_LEN 20
    int main()
    {
    char asGirl[MAX_GIRL_NUM][MAX_NAME_LEN] = 
    {"wang fei","zhang man yu","zhang zhi yi","li li","li xiao man",
    "li yu cun","yang ni","xiao tong","li lei","zhang san"};
    
    char sInputName[MAX_NAME_LEN];
    
    gets(sInputName);
    if (strlen(sInputName) >= MAX_NAME_LEN)
    {
    printf("Err:Out of range!");
    return 0;
    }
    // 添加自己的业务代码
    //分析输入的名字,得到其字母
    bool alpha[26]={0};
    for(int i=0;i<strlen(sInputName);i++)
    {
        if(sInputName[i]==' ') 
        {
            continue;
        }
        alpha[sInputName[i]-'a']=true;
    }
    
    int score[MAX_GIRL_NUM]={0};
    int name,scorehigh=0;
    for(int i=0;i<MAX_GIRL_NUM;i++)
    {
        bool match[26]={0};
        if(strlen(asGirl[i])==0)
            break;
        int j=0;
        for(j=0;j<strlen(asGirl[i]);j++)
        {
            if(alpha[asGirl[i][j]-'a']==true)
            {
                match[asGirl[i][j]-'a']=true;
            }
        }
        for(int k=0;k<26;k++)
        {
            score[i]=score[i]+match[k];
        }
        if(score[i]>scorehigh)
        {
            name=i;
            scorehigh=score[i];
        }
    }
    printf("\n");
    printf(asGirl[name],"%s");
    
    
    return 0;
    }

    关键注意点在于它要求的规则2,重复按一次处理,所以我想到了因为字母都是小写,可以统计字母a-z26个。还有一点要注意,对于空格,不要忽略了,这个,而导致以后运行的一些错误就可以了。

  • 相关阅读:
    使用adns库解析域名
    三星DRAM+NAND FLASH 合成MCP芯片介绍及应用攻略
    内核initcall分析
    linux head-common.s分析(转)
    linux heads分析(转)
    虚拟内存_内核空间_用户空间
    linux kernel学习笔记-5内存管理_转
    u-boot README--linux support
    u-boot README--Memory Management&initialize
    linux内核中mtd架构分析
  • 原文地址:https://www.cnblogs.com/liuliunumberone/p/2464948.html
Copyright © 2020-2023  润新知