c - 输出错误,但为什么呢?

标签 c arrays algorithm while-loop distribution

用户会分别给出N,S

如果N的值为3,即我有3个盒子,S的输入为6。 然后我以这样的方式编码,在第一种情况下(n=3),1被添加到每个盒子,然后再次(n=2)1被添加到每个盒子(A,B,C)不包括最后一个盒子,再次(n=1)1被添加到每个盒子,除了最后一个盒子以及倒数第二个盒子。
而每个方 block 中剩余球的总数是分配总值S后显示的,

例如:

它看起来像这样,其中 a、b、c 是 3 个框。 n=3 和 s=6

A B C
1 1 1
1 1
1
-----
3 2 1 //output to be displayed

如果 n 和 s 的输入分别是 4 和 9 那么输出将是,

A B C D
1 1 1 1
1 1 1
1 1
-------
3 3 2 1 //output to be displayed

如果 n 和 s 的输入分别是 3 和 4 那么输出将是,

A B C D
1 1 1 1
1 
-------
2 1 1 1 //output to be displayed

如果 n 和 s 的输入分别是 4 和 2 那么输出将是,

A B C D
1 1 
-------
1 1 0 0 //output to be displayed

对于 s = n*(n+1)/2 的 n 个最大值

实际上在这种情况下,代码的复杂度不可能是 O(n^2)。所以这是我的代码:

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

int main()
{
    int n,i,j,s,y,x1;
    scanf("%d%d",&n,&s);
    int b[n];
    memset(b,0,n);
    x1=n;
    j=0;
        while(s>0)
        {
            y=j%n;
            if(j!=n-1)
            {
                b[y]++;
                s--;
                j++;
            }
            else
            {
                b[y]++;
                s--;
                j=0;
                n--;
            }
        }
    for(i=0;i<x1;++i)
        {
            printf("%d ",b[i]);
        }
return 0;
}

但是执行代码后,我的代码给出的输出是:

where n = 4 and s = 9
the output is : 3 32631 -747449654 32629

where n = 3 and s = 5
the output is :2 2 4195586

为什么会这样?我不想使用嵌套 for 循环! 但是这里有什么问题吗?请帮助我!

最佳答案

void * memset ( void * ptr, int value, size_t num );

num是字节数,所以

memset(b,0,n);

应该是

memset(b,0,n*sizeof(int));

Live Demo

关于c - 输出错误,但为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28465215/

相关文章:

c - 有什么办法可以让下面的代码更加高效吗?

objective-c - 在 Objective-C 中使用 NaCl/libsodium 加密

c - 如果输入字符串超过 19 个字节,LwIP 套接字上的 UDP 服务器会陷入硬故障

javascript - 如何对嵌套数组中的所有元素求和?

ruby-on-rails - 一个很好的 gem 排名算法

algorithm - 查找具有给定 Xor 的子集的数量

c - execve() 从文件重定向标准输入

php - 在 php 中返回空数组

java - 将值从内部递归方法传递到外部方法

c++ - list.sort 和 std::sort 有什么区别?