首页 > 试题广场 >

单组_spj判断数组之和

[编程题]单组_spj判断数组之和
  • 热度指数:13737 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定两个整数 nm ,请你构造一个长度为 n 的正整数数组,使得其元素之和为 m
保证有 n \leq m

输入描述:
第一行有两个整数 n\ (\ 1 \leq n \leq 10^5\ )m\ (\ n \leq m \leq 10^9\ )


输出描述:
输出 n 个正整数,它们的和需要为 m
示例1

输入

3 6

输出

1 2 3
这个题目就是有问题啊,我输入3 6,输出1 1 4也是符合的呀,为什么报错呢

发表于 2024-11-27 16:05:41 回复(5)
没注意看执行结果,以为红了就是错了,浪费我时间了。。。。。仔细一看题解才发现,我开始的理解是正确的

发表于 2024-09-11 17:20:53 回复(0)
 222 和114都符合
发表于 2025-05-10 16:06:47 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 输入 n 和 m
        int n = scanner.nextInt();
        int m = scanner.nextInt();

        // 创建数组
        int[] array = new int[n];

        // 前 n-1 个元素为 1
        for (int i = 0; i < n - 1; i++) {
            array[i] = 1;
        }

        // 最后一个元素为 m - (n - 1)
        array[n - 1] = m - (n - 1);

        // 输出结果
        for (int num : array) {
            System.out.print(num + " ");
        }
        System.out.println();

        scanner.close();
    }
}
发表于 2024-09-20 23:12:11 回复(0)
#include <iostream>
#include <vector>
using namespace std;

int main () {
int n, m;
cin >> n >> m;
int extra = m - n; // 计算额外需要分配的数值(初始每个数为 1,总和为 n)
vector<int> res (n, 1); // 初始化数组为 n 个 1

// 从第二个数开始,尽量让序列保持递增
for (int i = 1; i < n && extra> 0; ++i) {
// 确保当前数至少比前一个数大 1,计算需要的增量
int need = res [i-1] + 1 - res [i];
// 实际分配的增量(不超过剩余的 extra)
int add = min (need, extra);
res [i] += add;
extra -= add;
}

// 若还有剩余的数值,全部加到最后一个数上(不破坏递增性)
if (extra> 0) {
res.back () += extra;
}

// 输出结果
for (int i = 0; i < n; ++i) {
cout << res [i] << (i == n-1 ? "\n" : " ");
}

return 0;
}
亲测通过
发表于 2025-09-02 19:29:58 回复(0)
这问题对强迫症真不友好 = =
#include <iostream>

using namespace std;

int main()
{
    long n, m;
    cin >> n >> m;
    for(long i = 0; i < n - 1; ++i)
        cout << 1 << " ";
    cout << m - n + 1 << endl;
}

发表于 2025-03-22 17:37:58 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        int a = m/n;
        int b = m%n;
        int [] arr = new int[n];
        for(int i = 0;i<n;i++){
            arr[i]=a;
        }
        arr[0]+=b;
        for(int i = 0;i<n;i++){
            System.out.print(arr[i]);
            System.out.print(" ");
        }
    }
}
发表于 2024-10-20 16:01:44 回复(0)
/*我认为这个题目主要是两个任务,1,创建一个大小为a的数组,2,数组里面填入大小和为b的数据,这个数据是随机的应该由随机数来给定,并且由裕度来决定随机数的范围,创建a大小的数组,在C语言中不能将变量当做数组大小,所以应该用向堆申请空间的形式创建*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZENAM 10     //裕度
int main() {
    int a, b;
    int sum;
    srand((unsigned int) time(NULL));
    int randint =rand()%SIZENAM;
    scanf("%d %d", &a, &b);
    int* array = (int*)malloc(a*sizeof(int));
    if(array == NULL)
    {
        printf("err malloc");
    }
    while(1)
    {
        sum = 0;
        for(int i = 0;i<a;i++)
        {
            array[i] = rand()%SIZENAM ;
            sum+=array[i];
        }
        if(sum == b)
        {
            break;
        }
    }
    for(int i = 0;i<a;i++)
    {
        printf("%d ",array[i]);
    }
    free(array);
    array = NULL;

return 0;

}


发表于 2024-08-23 10:01:16 回复(0)
pOq头像 pOq
判断能不能整除,能整除,全为m/n,不能,其中一个是m/n + m%n,其他都是m/n
#include <iostream>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    // n 个数,和为m
    if(m%n == 0){
        // 整除
        for(int i=0; i<n; i++){
            cout << m/n << ' ';
        }
    }else{
        cout << m%n + m/n << ' ';
        for(int i=0; i<n-1; i++){
            cout << m/n << ' ';
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

发表于 2025-10-30 15:29:26 回复(0)
这题有点弱智,3 6,我™直接输出 0 0 6不行?既没有限制顺序,又没有要求不能重复。
发表于 2025-10-28 23:13:01 回复(0)
import sys

for line in sys.stdin:
    a = line.split()
    x,y = int(a[0]) ,int(a[1])
    print((x-1)*'1 '+ str(y-x+1))
无脑用n-1 个1相加如何呢
发表于 2025-10-14 19:51:38 回复(0)
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n,m;
    cin >> n >> m;
    std::vector<int> myVec;
    int base = m / n;
    int remainder = m % n;
    for(int i = 0; i < n; i ++ )
    {
        myVec.emplace_back(base);
    }
    for(int i = 0;i < remainder; i++)
    {
        myVec[i] += 1;
    }

    for(auto x : myVec)
    cout << x << " ";
}  
// 64 位输出请用 printf("%lld")
发表于 2025-10-11 20:59:12 回复(0)
换掉自测输入 3 6不严谨
发表于 2025-10-05 14:23:39 回复(0)
不是这出的什么题
发表于 2025-09-29 17:18:05 回复(0)
小学生都出不了这种题目。
发表于 2025-09-25 23:11:07 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();
        int m = in.nextInt();
        int[] res = new int[n];
        int base = m/n;
        int remain = m - base*n;
        Arrays.fill(res, base);
        for(int i = 0; i < remain; i++){
            res[i]++;
        }
        for(int i = 0; i < n; i++){
            System.out.print(res[i]);
            if(i != n-1){
                System.out.print(" ");
            }
        }
    }
}
发表于 2025-09-19 23:12:21 回复(0)
usrInput = list(map(int, input().split()))
for i in range(usrInput[0] - 1):
    print(1, end=' ')
print(usrInput[1] - usrInput[0] + 1)

发表于 2025-09-12 19:55:17 回复(0)
不是,为什么我写这种***代码也能通过?这题也是出的烂的离谱
#include <iostream>
using namespace std;

int main(){
    int n, m;
    cin >> n >> m;
    while(n--){
        if(n!=0){
            cout << 1 <<" ";
            m--;
        }else{
            cout << m;
        }
    }
}

发表于 2025-09-01 23:15:27 回复(0)
#include <iostream>
using namespace std;

int main() {
    int n = 1;
    int m=1;

    int a = m / n;
    int b = m % n;
    if (a == 0)
    {
        for (int i = 0; i < n; i++)
        {
            cout << a << " ";
        }
    }
    else
    {
        cout << a + b << " ";
        for (int i = 0; i < n - 1; i++)
        {
            cout << a << " ";
        }

    }
}主打一个投机倒把,就是想让脑子偷懒

发表于 2025-08-22 21:14:14 回复(0)
n,m = map(int,input().split())
a = max(m//n,1) # 整除,并保证为正整数

for _ in range(n-1):    # 前n-1个数取a
    print(a)

print(m-(n-1)*a)    # 最后一个数取剩余量
感觉我没看懂题目啊,为什么我这样写不行?
发表于 2025-08-14 14:47:51 回复(0)