首页 > 试题广场 >

单组_spj判断数组之和

[编程题]单组_spj判断数组之和
  • 热度指数:6378 时间限制: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 回复(2)
没注意看执行结果,以为红了就是错了,浪费我时间了。。。。。仔细一看题解才发现,我开始的理解是正确的

发表于 2024-09-11 17:20:53 回复(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)
/*我认为这个题目主要是两个任务,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)
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)
这问题对强迫症真不友好 = =
#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)
n, m = map(int, input().split(" "))
for i in range(n-1):
    # 打印n-1个1,和为n-1
    print(1, end=" ")
print(m - (n - 1), end="")  # 余下的数作为第n个数
发表于 2025-03-20 23:19:02 回复(0)
我的错误提示是:
输入 3 100000
预期输出 1 1 999998
为什么我提交后的用例是这种,为什么你们的题解按均匀分布能过,很纳闷啊,顺序错了也不过
发表于 2025-03-10 13:56:42 回复(0)
#include <iostream>
using namespace std;

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

}
//将m的值分解为所有的1和剩余值
发表于 2025-02-26 23:07:02 回复(0)
此题难度不算大,但是需要逻辑能力,需要知道如何分配数据。
#include <stdio.h>
void  num(int  n,long  long  m)
{
    long  long  a[n];//定义一个数组,用来储存元素
    for (int  i=0;i<n;i++)//首先初始化元素,方便后续操作
    {
        a[i]=1;
    }
    long  long  s=m-n;//这里举个例子,前面的元素已经初始化了,比如n=5,m=10,a[5]={1,1,1,1,1},全部加起来后和10还相差5,所以这里将他们的差存储为s
    for (int  i=0;i<n&&s>0;i++)//接上面,a[5]={1,1,1,1,1},所以将剩余的值加到第一个数,a[5]={6,1,1,1,1},此时s=0,跳出循环,每个元素相加刚好为10
    {
        long  long  add=s;
        a[i]+=add;
        s-=add;
    }
    for (int  i=0;i<n;i++)//循环输出每个元素
    {
        printf("%lld ",a[i]);
    }
    printf("\n");
}
int main() {
    int  n;
    long  long  m;
    scanf("%d%lld",&n,&m);
    num(n,m);
    return 0;
}
发表于 2025-02-25 20:58:14 回复(0)
int main() {
    int n, m;
    scanf("%d%d", &n, &m);
    int output[n];
    int divide=m/n;
    int remain=m-divide*n;
    for (int i=0;i<n;i++){
        output[i]=divide;
    }
    for (int i=0;i<remain;i++){
        output[i]=output[i]+1;
    }

     for (int i=0;i<n;i++){
        printf("%d ",output[i]);
    }
   
}
发表于 2025-02-14 06:00:02 回复(0)
#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    int s = b;
    int i =0;
    while (s>0 &&i<a) {
        i++;
        if(i<(a))
        {
            cout<<1<<" ";
        }else {
            cout<<s-i+1;
        }
       
     
    }
     cout <<  endl;
}
发表于 2025-02-12 17:14:49 回复(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();
        int sum = in.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            if (i == n - 1) {
                nums[i] = sum - n + 1;
            } else {
                nums[i] = 1;
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            sb.append(nums[i]);
            if (i == n - 1)
                continue;
            sb.append(" ");
        }
        System.out.print(sb.toString());
    }
}
发表于 2024-12-31 15:58:35 回复(0)
def construct_array(n, m):
    # 初始化数组,每个元素为 1
    arr = [1] * n
    # 计算剩余的和
    remaining = m - n
    # 均匀分配剩余的和
    for i in range(n):
        # 计算每个元素可以增加的最大值
        add = min(remaining, m // n)
        arr[i] += add
        remaining -= add
        if remaining == 0:
            break
    return arr

# 读取输入
n, m = map(int, input().split())
# 构造数组
result = construct_array(n, m)
# 输出结果,确保顺序正确
print(" ".join(map(str, result)))

发表于 2024-12-14 12:31:02 回复(0)
n,m = map(int,input().split())
list_ = [0]*n

out_list = []

for i in range(n):
    if i != n-1:
        out_list.append('1')
    else:
        out_list.append(str(m-n+1))
print(' '.join(out_list))
发表于 2024-11-23 02:08:00 回复(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();
        int m=in.nextInt();

        int[] arr=new int[n];
        for(int i=0;i<n;i++) {
            arr[i]=1;
        }
        arr[arr.length-1]=m-(n-1);

        for(int i=0;i<n;i++) {
            System.out.print(arr[i]+" ");
        }
    }
}
发表于 2024-10-30 17:11:27 回复(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)
 int n = 0;
        int m = 0;
        string s = System.Console.ReadLine();
        n = System.Convert.ToInt32(s.Split(' ')[0]);
        m = System.Convert.ToInt32(s.Split(' ')[1]);
        int mid = m / n;
        int yu = m % n;
        if (yu > 0) {
            mid = mid + 1;
        }
        if (mid == 1) {
            for (int i = 0; i < m; i++) {
                System.Console.Write("1 ");
            }
        }
         else {
            int sum = 0;
            for (int i = 1; i <= mid; i++) {
                sum += System.Convert.ToInt32(i);
            }
            if (sum > mid||mid>n) {
                for (int i = 0; i < n - 1; i++) {
                    System.Console.Write("1 ");
                }
                System.Console.Write(m - n + 1);
            } else {
                for (int i = 1; i <= mid; i++) {
                    System.Console.Write(i + " ");
                }
                for (int i = mid + 1; i <= n; i++) {
                    System.Console.Write(i + " ");
                }
            }
        }
发表于 2024-10-17 15:58:06 回复(0)
#前面全部用1填充
import
sys

for line in sys.stdin:
    a = line.split()
    n, m = int(a[0]), int(a[1])

    for i in range(n-1):
        print(f"1 ")
    print(m-n+1)# m--(n-1)

发表于 2024-10-13 22:56:46 回复(0)