群答疑随手记:花椰妹在纸上写下了若干个连续的正整数,她把这些数遮挡住,只告诉蒜头君一共有k个数,它们的和为n,请蒜头君猜猜纸上是哪些数。现在蒜头君向你求助,帮他解决这个问题。(连续整数和)

简介: 群答疑随手记:花椰妹在纸上写下了若干个连续的正整数,她把这些数遮挡住,只告诉蒜头君一共有k个数,它们的和为n,请蒜头君猜猜纸上是哪些数。现在蒜头君向你求助,帮他解决这个问题。(连续整数和)

今天收到粉丝提问啦,抽空编个小代码解答一下啦!感谢他的信任!(以下是我的答案,仅供参考,如有错误,欢迎指正,谢谢)

image.gif

题目:

       连续整数和:花椰妹在纸上写下了若干个连续的正整数,她把这些数遮挡住,只告诉蒜头君一共有k个数,它们的和为n,请蒜头君猜猜纸上是哪些数。现在蒜头君向你求助,帮他解决这个问题。

要求:

       输入:两个整数n和k。输出:一行,k个整数从小到大输出。

代码:(C++语言)

#include <iostream>
#include <stdio.h>
#include <ctype.h>
#include<algorithm>
#include<cstring> 
#include<stdlib.h>  
using namespace std;
#define MAX 100;
int s2i(string s);
int check(string s);
int check_n(string s);
int check_k(string s);
int check_chinese(string s);
int sum(int i, int j);
int main()
{
    string n0,n1;
    int k, n;
    cout<<"请输入连续正整数的个数k(1<=k<=100):"<<endl;
    cin >> n0;
    while (check(n0) || check_k(n0)) {
        cout << "请输入0-100的正整数,不要输入负数或者小数或字母或汉字或超出范围的数:" << endl;
        cin >> n0;
    }
    cout << "请输入k个连续的正整数和的值n:" << endl;
    cin >> n1;
    while (check(n1)|| check_n(n1)){
        cout << "请输入1<=k<=10^9的正整数,不要输入负数或者小数或字母或汉字或超出范围的数:" << endl;
        cin >> n1;
    }
    k = s2i(n0);
    n = s2i(n1);
    while (true) {
        int i, j;
        char flag = false;
        for (i = 1; i <= n / 2; i++) {
            for (j = i; j < n; j++) {
                if (sum(i, j) == n && (j - i + 1 )==k) {
                    flag = true;
                    for (int p = i; p <= j; p++)
                        cout << p << " ";
                    cout << endl;
                    break;
                }
            }
        }
        if (flag == false)
            cout << "不存在"<<k<<"个连续的正整数和的值为"<<n << endl;
        break;
    }
    return 0;
}
int check_chinese(string s)
{
    string t;
    for (int i = 0; i < s.length(); i++)
    {
        if (s[i] < 255 && s[i]>0) //扩充的ASCII字符范围为0-255,如是,处理一个字节
        {
            t.append(s.substr(i, 1));
            t.append("/");
        }
        else //<0,>255的是汉字,处理两个字节
        {
            t.append(s.substr(i, 2));
            t.append("/");
            ++i;
            return -1;
        }
    }
    return  0;
}
int sum(int i, int j)
{
    return  (i + j) * (j - i + 1) / 2;
}
int s2i(string s)
{
    return atoi(s.c_str());
}
int check(string s) {
    if (check_chinese(s)==-1)
    {
        return -1;
    }
    else
    {
        char* a = new char[s.length()];
        strcpy(a, s.c_str());
        int i;
        for (i = 0; i < s.length(); i++) {
            if (!isdigit(a[i])) {
                return -1;
            }
        }
        return 0;
        delete[]a;
        a = NULL;
    }
}
int check_k(string s)
{
    int k;
    k = s2i(s);//string转为int存储
    if (k < 1 || k>100)
    {
        return -1;
    }
    else
    {
        return 0;
    }
}
int check_n(string s)
{
    int n;
    n = s2i(s);//string转为int存储
    if (n < 1 || n> pow(10, 9))
    {
        return -1;
    }
    else
    {
        return 0;
    }
}

image.gif

运行结果:

image.gif

image.gif

image.gif

用户不合理输入测试:image.gif

相关文章
|
6月前
|
算法 测试技术
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
LeetCode题解-让所有学生保持开心的分组方法数
LeetCode题解-让所有学生保持开心的分组方法数
|
6月前
除夕日的每日一题(字符个数统计,多数元素)
除夕日的每日一题(字符个数统计,多数元素)
40 2
|
6月前
|
算法 测试技术
day2·算法-快乐数-有效三角形个数
day2·算法-快乐数-有效三角形个数
37 0
|
6月前
每日一题来啦!请查收~(至少是其他数字两倍,两个数组的交集)
每日一题来啦!请查收~(至少是其他数字两倍,两个数组的交集)
31 0
|
数据采集 数据挖掘 Python
【每周一坑】乒乓数
刚从假期回来,又要迎接周末,各位看官想必都很辛苦,所以本周每周一坑为大家准备一道简单的甜点题目,本题取材于伯克利大学 CS61 课程 homework02。
|
算法
【算法挨揍日记】day06——1004. 最大连续1的个数 III、1658. 将 x 减到 0 的最小操作数
1004. 最大连续1的个数 III 题目描述: 给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。
408 1
|
安全 Cloud Native
【刷题日记】357. 统计各位数字都不同的数字个数
本次刷题日记的第 30 篇,力扣题为:357. 统计各位数字都不同的数字个数 ,中等
|
机器学习/深度学习 Cloud Native
【刷题日记】2044. 统计按位或能得到最大值的子集数目
本次刷题日记的第 8 篇,力扣题为:2044. 统计按位或能得到最大值的子集数目 ,中等