用户将得到N,分别š错误的输出,但为什么?
如果N的值是3,即我有3盒和S的输入是6 然后我以这样的方式,在第一情况下(N编码= 3),每个方框加1,然后再向每个方框(A,B,C)加1(n = 2),除了最后一个方框外,再次(n = 1)最后一个盒子以及倒数第二个盒子。
而留在每个框中合计值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 ANS S上的输入为4和9 然后输出将是,
A B C D
1 1 1 1
1 1 1
1 1
-------
3 3 2 1 //output to be displayed
如果再次正ANS S中的输入3个和4 然后输出将是,
A B C D
1 1 1 1
1
-------
2 1 1 1 //output to be displayed
如果再次正ANS S上的输入为4和2 然后输出将是,
A B C D
1 1
-------
1 1 0 0 //output to be displayed
对于s的N MAX值= N *(N + 1)/ 2
实际上在这种情况下,该代码的复杂性是不能忽视的为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循环! 但是这里有什么不对?请帮帮我!
你知道'memset(b,0,n)'把'b'的第一个'n' *字节*设置为零,但'b'是一个数组'n ''int's? – lurker 2015-02-11 21:56:51
顺便说一句,作为一种改进,我建议总是给你的程序中的变量提供更多的描述性名称,比如“box”而不是“b”和“numBoxes”而不是“n”。它会帮助你和其他看你的代码的人更容易地遵循逻辑。 – 2015-02-11 22:06:00
这段代码的时间复杂度是多少? – 2015-02-11 22:15:21