天梯赛 L1-008 求整数段和 (10分)

L1-008 求整数段和 (10分)

给定两个整数AB,输出从AB的所有整数以及这些数的和。

输入格式:

输入在一行中给出2个整数AB,其中 100 A B 100 −100≤A≤B≤100 ,其间以空格分隔。

输出格式:

首先顺序输出从AB的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X

输入样例:

-3 8 

输出样例:

   -3   -2   -1    0    1
    2    3    4    5    6
    7    8
Sum = 30

答案1

格式错误,可我怎么找不出哪里错误呢???

这个解答是错误的

#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
    int n, m;
    scanf("%d %d", &n, &m);
    if(n > m){                  //这里是废话
        int temp = n;
        n = m;
        m = temp;
    }
    int sum = 0;
    int count = 0;
    for(int i = 0; i <= (m - n); i++){
        printf("%5d", n+i );
        sum += (n + i);
        count++;
        if(!(count % 5)){
            printf("\n");
        }
        else if((count % 5) && ((n + i) != m)){  //所以这个判断是错误的
            printf(" ");
        }
    }
    if(count % 5)
            printf("\n");

    printf("Sum = %d", sum);
    return 0;
}

刚刚发现,不需要判断n, m 大小,题目给了大小关系

我换一下方式吧

aaaaa 原来%5d之后就不用加空格了!亏我还各种判断,还以为最只有最后一位才没有空格!

答案2

精简版,去掉了答案1的废话和错误的判断,用了cin和cout

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int main(){
    int i, j, m, n;
    cin >> m >> n;
    int count = 0;
    int sum = 0;
    for(i = m; i <= n; i++){
        count++;
        sum += i;
        printf("%5d", i);
        if(count % 5 == 0 && i != n)
            printf("\n");
    }
    cout << endl;
    cout << "Sum = " << sum << endl;
    return 0;
}
发布了44 篇原创文章 · 获赞 0 · 访问量 1336

猜你喜欢

转载自blog.csdn.net/qq_41664688/article/details/104133694