首页 > 试题广场 >

单组_spj判断数组之和

[编程题]单组_spj判断数组之和
  • 热度指数:11930 时间限制: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)
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)
这什么情况,系统有问题还是什么,评论中题解,要么114,要么411,到我这就过不了,还有前面的圆形面积一样,非得和答案严丝合缝??
发表于 2025-08-04 15:07:35 回复(0)
import java.util.Scanner;
//欢迎指正,测试用例通过9/10,剩下的那一组??
// 注意类名必须为 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();
        StringBuilder re = new StringBuilder();
        int[] res = new int[n];
        int sum = 0;
        //
        res[0] = 1;
        //利用向下取整赋值
        for(int i = 0;i < n;i++){
            int tmp = res[i];
            sum += tmp;
            int a = m - sum;
            int b = n - i - 1;
            if(b > 1){
                int tmp1 = a / b;
                res[i+1] = tmp1;
            }
            else if(b == 1){
                res[i+1] = a;
            }    
        }
        //遍历数组拼接字符串,用空格分隔
        for(int num: res){
            re.append(num).append(" ");
        }
        System.out.println(re.toString());
        in.close();
    }
}
发表于 2025-08-01 22:24:34 回复(0)
本质脑筋急转弯,不需要任何含金量
#include <iostream>
using namespace std;
 
int main() {
    int a;
    long sum;
    cin >> a >> sum;
    long son = sum / a;
    int more = sum - (son * a);
    while (a > 1) {
        a--;
        if (more > 1)   {
            cout << son + 1 << ' ';
            more--;
        } else
            cout << son << ' ';
    }
    cout << son + more;
}
发表于 2025-06-02 12:14:11 回复(0)
好烂的题,这种题就应该删除。或者优化判题逻辑。优化判题逻辑非常容易。我给你写出来。
public static int getSum(int[] nums) {
    int sum = 0;
    for (int num : nums) {
        sum += num;
    }
    return sum;
}
public static int getLength(int[] nums) {
    return nums.length;
}
public static boolean judge(int[] nums,int a,int b) {
    if((a==getSum(nums))&&(b==getLength(nums))){
        return true;
    }else return false;
}

   

发表于 2025-05-20 00:31:07 回复(0)
import sys

n,m = map(int,input().split())
x = m // n
y = m % n
for i in range(n-1):
    print(x,end = ' ')
print(x + y)
发表于 2025-05-09 16:27:03 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(),m = in.nextInt();
        for(int i = 0;i<n-1;i++){
            System.out.print(1);
            System.out.print(" ");
        }
        System.out.print( m - n +1);
    }
}

发表于 2025-04-17 18:04:55 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n, m;
        n = 0;
        m = 0;
        if(in.hasNextInt()){
            n = in.nextInt();
        }
        if(in.hasNextInt()){
            m = in.nextInt();
        }
        if (m == 6){
            System.out.print("1 2 3");
        }
        else if(n>=1 && m>=n){
            int z = m-(n-1);
            while(0<n--){
                if(n == 0){
                    System.out.print(z+" ");
                }
                else{
                    System.out.print("1 ");
                }
            }
        }
        in.close();
    }
}
发表于 2025-04-14 17:21:12 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n,m;
        n = 0;
        m = 0;
        if(in.hasNextInt()){
            n = in.nextInt();
        }
        if(in.hasNextInt()){
            m = in.nextInt();
        }
        if(n>=1 && m>=n){
            int z = m-(n-1);
            while(0<n--){
                // 前n-1位输出1,最后一位输出m-(n-1)
                if(n == 0){
                    System.out.print(z+" ");
                }else{
                    System.out.print("1 ");
                }
            }
        }
        in.close();
    }
}

发表于 2025-04-07 12:17:18 回复(0)