首页 > 试题广场 >

单组_spj判断数组之和

[编程题]单组_spj判断数组之和
  • 热度指数:9526 时间限制: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
此题难度不算大,但是需要逻辑能力,需要知道如何分配数据。
#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)
/*我认为这个题目主要是两个任务,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)