zoukankan      html  css  js  c++  java
  • 天梯题目解答——1205、1075、1083、1160

    1205 单词翻转:

    题目描述 Description

    给出一个英语句子,希望你把句子里的单词顺序都翻转过来

    输入描述 Input Description

    输入包括一个英语句子。

    输出描述 Output Description

    按单词的顺序把单词倒序输出

    样例输入 Sample Input

    I love you

    样例输出 Sample Output

    you love I

    #include <iostream>
    #include <string>
    using namespace std;
    
    void resever_word(string str1){
        int len = str1.size();
        int i=0;
        while(i<len/2){
            str1[i] = str1[len-i-1]^str1[i];
            str1[len-i-1] = str1[i]^str1[len-i-1];
            str1[i] = str1[i]^str1[len-i-1];
            i++;
        }
        int fr=0,er=0;
        for(int j=0;j<len;j++)
        {
            er = j;
            if(str1[er] == ' ' || er==len-1)
            {
                if(er==len-1)
                    er++;
                int k=0;
                while(k<(er-fr)/2){
                    str1[fr+k] = str1[er-k-1]^str1[fr+k];
                    str1[er-k-1] = str1[fr+k]^str1[er-k-1];
                    str1[fr+k] = str1[fr+k]^str1[er-k-1];
                    k++;
                }
                fr = er+1;
            }
        }
        cout << str1 << endl;
    }
    
    int main()
    {
        string str;
        getline(cin,str);
        resever_word(str);
        return 0;
    }

      读取输入语句,先整体句子翻转,再翻转每个单词。

    1075 明明的随机数:

    题目描述 Description

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

    输入描述 Input Description

    有2行,第1行为1个正整数,表示所生成的随机数的N个数:

    第2行有N个用空格隔开的正整数,为所产生的随机数

    输出描述 Output Description

    第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小

    到大排好序的不相同的随机数。

    样例输入 Sample Input

    10

    20 40 32 67 40 20 89 300 400 15

    样例输出 Sample Output

    8

    15 20 32 40 67 89 300 400

    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    
    int main()
    {
        int n;
        cin >> n;
        int num[100]={0},onum[100]={0};
        for(int i=0;i<n;i++)
        {
            cin >> num[i];
        }
        cout << endl;
        sort(num,num+n);
        int j=1,m=1;
        onum[0] = num[0];
        while(j<n)
        {
            while(num[j]==num[j-1]){
                j++;
            }
            onum[m++] = num[j];
            j++;
        }
        cout << m << endl;;
        for(int i=0;i<m;i++)
        {
            cout << onum[i] << " ";;
        }
        return 0;
    }

      去掉重复是将不重复的数据放到新的arrary中。

    1083 Cantor表

    题目描述 Description

    现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我们以Z字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,…

    输入描述 Input Description

    整数N(1≤N≤10000000)

    输出描述 Output Description

    表中的第N项

    样例输入 Sample Input

    7

    样例输出 Sample Output

    1/4

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int n,i=1;
        cin >> n;
        int sum = 0;
        for(;sum<n;i++)
        {
            sum = sum+i;
        }
        i = i-1;    //i斜行
        int a=1,b=1,num;
        if(i%2 == 0){
            num = sum-n+1;
            b = num;
            a = i+1-b;
            cout << a << "/" << b;
        }
        else{
            num = sum-n+1;
            a = num;
            b = i+1-a;
            cout << a << "/" << b;
        }
        return 0;
    }

      先判断在第几斜行,再判断第i斜行的第几个数,由i为奇偶来判断是从上还是从下开始走,即a、b的计算方法。

    1160 蛇形矩阵

    题目描述 Description

    小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和.

    输入描述 Input Description

    n(即n行n列)

    输出描述 Output Description

    n+1行,n行为组成的矩阵,最后一行为对角线数字之和

    样例输入 Sample Input

    3

    样例输出 Sample Output

    5 4 3
    6 1 2
    7 8 9
    25

    #include <iostream>
    using namespace std;
    
    #define MIN 100
    #define MAX 10000
    
    int main()
    {
        int n, m, num[MAX]={0},snake[MIN][MIN]={0};
        cin >> n;
        if(n%2==0)
            return 0;
        m = n*n;
        int i=0,j=0;
        //存下n的矩阵的所有数,顺序排放在num中
        while(i<(m))
        {
            num[i] = i+1;
            i++;
        }
        //分配对角线的值
        int core,up,down;
        core = n/2;
        up = core-1;
        down = core+1;
        snake[core][core] = 1;
        for(i=2;i<=n;i=i+2)
        {
            snake[up][up] = i*i+1;
            snake[down][down] = (i+1)*(i+1);
            up--;down++;
        }
        //分配上半矩阵
        up = core-1;
        for(i=2;i<n;i=i+2)
        {
            j=1;
            while(j<=i)
            {
                snake[up][up+j] = snake[up][up]-j;
                snake[up+j][up] = snake[up][up]+j;
                j++;
            }
            up--;
        }
        //分配下半矩阵
        down = core+1;
        for(i=1;i<n;i+=2)
        {
            j=1;
            while(j<=i)
            {
                snake[down][down-j] = snake[down][down]-j;
                snake[down-j][down] = snake[down-i-1][down]-(i-j+1);
                j++;
            }
            down++;
        }
        int sum=0;
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                cout << snake[i][j] << " ";
                if(j == (n-i-1)||j==i){
                    sum = sum+snake[i][j];
                }
            }
            cout << endl;
        }
        cout << sum;
        return 0;
    }

      自己写的,可能赋值麻烦了点,不过还挺好理解的。

      先给对角线赋值(core,core),up和down分别沿着对角线往上下两个方向走。可以写几个矩阵例子,n为偶数最大值在右上顶角,n为奇数最大值在左下顶角,这里题目要求n是奇数。

      上三角矩阵以右上顶角(up,up)值为标准,向下每行+1,向右每列-1,这个容易写;下三角矩阵,以对角线上左下角(down,down)为标准,向左每列-1,但是向上就得以(down-i-1,down)的值为标准,依次网上-(i-j-1),这里可能麻烦点,反正标准点可以换,自然计算方式也可以换。

      最后打印对角线上的值要包括X两条对角线。

  • 相关阅读:
    【转】iOS深入学习(Block全面分析)
    iOS—请求Web Service
    iOS设计模式——MVC
    iOS基础知识
    iOS学习——常用博客
    【转】使用segue页面间传递数据
    【转】storyboard之 prepareForSegue:sender:
    【转】NSDictionary和NSMutableDictionary用法详解
    配置.pch文件
    MKNetworkKit下载图片并显示在UIImageView上
  • 原文地址:https://www.cnblogs.com/heyuheitong/p/4015235.html
Copyright © 2011-2022 走看看