算法入门竞赛经典第三章习题答案

#include<iostream>
#include<cstring>
#include<string>
#include<math.h>
#include<sstream>
using namespace std;

#define MAX 1000
//习题3-1
/*
int Grade[MAX];
int Count[MAX];
*/

//习题3-3
//char Char[MAX];

//习题3-4
/*
char Cal[MAX];
char Str[MAX];*/

//习题3-5
int Tran[MAX][MAX];

//习题3-6
//char Array[MAX];

//习题3-7
//int Array_int[MAX];

//习题3-8
char CharArray[MAX];
int main()
{
    //习题3-1
    /*
    memset(Grade,-1,sizeof(Grade));
    memset(Count,0,sizeof(Count));
    int grade,count = 0;
    while (cin >> grade)
    {
        Grade[count++] = grade;
    }

    for (int i = 0; i < count; i++)
    {
        int temp = Grade[i];
        int num = 0;
        for (int i = 0; i < count; i++)
            if (temp == Grade[i])
                num++;
        Count[temp] = num;
    }
    
    int Max = Count[0];
    int location;
    for (int i = 0; i < MAX; i++)
    {
        if (Max < Count[i])
            Max = Count[i];
    }

    for (int i = 0; i < MAX; i++)
    {
        if (Max == Count[i])
        {
            cout << "出现次数最多的分数为: " << endl;
            cout << i << " " << Count[i] << endl;
        }
    }*/

    //习题3-2
    /*
    int ch;
    int count_char = 0;
    int count_word = 0;
    
    //getchar()返回值为int, 返回值为10时,即在标准输入流中读取到了换行符
    //在条件判断和循环判断当中,非零即为真,所以即使if(-1),那么仍然判断为真,继续执行语句
    //所以此处判断才应该为while ((ch = getchar()) != 10),而非ch=getchar(),因为当输入ctrl+z时,getchar()
    //返回值为-1,非零,仍然会继续循环
    while ((ch = getchar()) != 10)
    {
        if ((ch == 32) && (count_char == 0))
            continue;
        if ( (ch == 32) && (count_char != 0) )
        {
            count_word++;
            cout << "count_word = " << count_word << endl;
            continue;
        }
        if ( ( (ch >= 65)&&(ch <= 90) ) || ( (ch >= 97)&&(ch <= 122) ) )
        {
            count_char++;
            cout << "count_char = " << count_char << endl;
        }
    }
    if (count_char != 0)
    {
        count_word++;
        cout << "当前" << count_word << "个" << "单词的平均长度为:" << (float)count_char/count_word << endl;
    }
    else
        cout << "当前输入为空" << endl;
    */

    //习题3-3
    /*
    gets(Char);
    cout << Char << endl;
    int size = strlen(Char);
    cout << "字符串长度为: " << size << endl;
    int count_digit = 0;
    int sum = 1;
    int num = 0;
    for (int i = 0; i < size; i++)
    {
        cout << "i is " << i << " " << Char[i] << endl;
        
        if ( (Char[i] >= '0') && (Char[i] <= '9') && (Char[i+1] >= '0') && (Char[i+1] <= '9'))
            count_digit++;

        if ( (Char[i] >= '0') && (Char[i] <= '9') && (Char[i+1] >= 'A') && (Char[i+1] <= 'Z'))
        {
            count_digit++;
            while (count_digit)
            {
                int x = pow(10,count_digit - 1);
                int y = Char[i - count_digit + 1] - '0';
                int total = x * y;
                num += total;
                count_digit--;
            }
            cout << "num is " << num << endl;
            sum *= num;
        }

        if ( (Char[i] >= '0') && (Char[i] <= '9') && ((i+1) == size))
        {
            count_digit++;
            while (count_digit)
            {
                int x = pow(10,count_digit - 1);
                //获得数字字符代表的整型数值
                int y = Char[i - count_digit + 1] - '0';
                int total = x * y;
                num += total;
                count_digit--;
            }
            cout << "num is " << num << endl;
            sum *= num;
        }

        if ((Char[i] >= 'A') && (Char[i] <= 'Z'))
        {
            count_digit = 0;
            num = 0;
            continue;
        }
            
    }
    cout << sum % 1000 << endl;
    */

    //习题3-4
    /*
    gets(Cal);
    int size = strlen(Cal);
    int count = 0;
    for (int i = 0; i < size; i++)
    {
        if ((Cal[i] >= '0') && (Cal[i] <= '9'))
            Str[count++] = Cal[i];
        if ((Cal[i] == '+') || (Cal[i] == '-') || (Cal[i] == '*'))
            Str[count++] = Cal[i];
    }
    Str[count] = '\0';
    //cout << Str << endl;
    //cout << count << endl;
    int count_digit = 0;
    int num1 = 0;
    int num2 = 0;
    if ( ((Str[0] >= '0') && (Str[0] <= '9')) && ((Str[1] >= '0') && (Str[1] <= '9')))
    {
        num1 = 10*(Str[0]- '0') + Str[1]- '0';
        if ( ((Str[3] >= '0') && (Str[3] <= '9')) && ((Str[4] >= '0') && (Str[4] <= '9')))
        {
            num2 = 10*(Str[3] - '0') + Str[4] - '0';
        }
        else
        {
            num2 = Str[3] - '0';
        }

        switch(Str[2])
        {
        case '+':
            cout << num1 + num2 << endl;
            break;
        case '-':
            cout << num1 - num2 << endl;
            break;
        case '*':
            cout << num1 * num2 << endl;
            break;
        }
    }
    if (((Str[0] >= '0') && (Str[0] <= '9')) && ((Str[1] == '+') || (Str[1] == '-') || (Str[1] == '*')))
    {
        num1 = Str[0] - '0';
        if ( ((Str[2] >= '0') && (Str[2] <= '9')) && ((Str[3] >= '0') && (Str[3] <= '9')))
            num2 = 10*(Str[2]- '0') + Str[3]- '0';
        else
            num2 = Str[2]- '0';
        cout << num1 << "    " << num2 << endl;
        switch(Str[1])
        {
        case '+':
            cout << num1 + num2 << endl;
            break;
        case '-':
            cout << num1 - num2 << endl;
            break;
        case '*':
            cout << num1 * num2 << endl;
            break;
        }
    }
    */

    //习题3-5



    //习题3-6
    /*
    //base为基数,m是正整数
    unsigned m,base;
    cin >> base;
    cin >> m;
    int temp = m / base;
    int temp2 = m % base;
    int count = 0;
    Array[count++] = temp2 + '0';
    Array[count++] = temp + '0';
    while (temp >= base)
    {
        temp2 = temp % base;
        Array[count-1] = temp2 + '0';
        temp /= base;
        Array[count++] = temp + '0';
    }
    Array[count] = '\0';
    for (int i = count - 1; i > 0; i--)
        cout << Array[i];
    cout << Array[0] << endl;
    */

    //习题3-7
    /*
    int base,num;
    cin >> base;
    cin >> num;
    stringstream str;
    str << num;
    string Str;
    str >> Str;
    int length = Str.size();
    int number = 0;
    for (string::iterator iter = Str.begin(); iter != Str.end(); iter++)
        number += ((*iter)-'0')* pow(base,--length);
    cout << number << endl;
    */

    //习题3-8
    /*
    int EnglishBoard[]=
    {
        1,2,3,
        1,2,3,
        1,2,3,
        1,2,3,
        1,2,3,
        1,2,3,4,
        1,2,3,
        1,2,3,4
    };
    gets(CharArray);
    int size = strlen(CharArray);
    for (int i = 0; i < size; i++)
    {
        int n = CharArray[i] - 'a';
        cout << CharArray[i] << EnglishBoard[n];
    }
    cout << endl;
    */
    system("pause");
    return 0;
}


转载于:https://my.oschina.net/u/2286203/blog/361086

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值