这是我的实现,我将数字取下来并通过数学计算将其放入堆栈中,但是即使我关于问题的逻辑是正确的,也无法产生正确的输出... 请检测我的实现中有什么问题。这是竞争性编程我学院的两家公司都提出了这个问题。因此,请帮助我更正实施...。 我只想知道我的实现有什么问题.....
实际问题: 输入: 输入的第一行包含一个整数T,它表示测试用例的数量。每个包含N的测试用例只有一行。 输出: 在一行中打印所有具有十进制值从1到N的二进制数字。 限制条件: 1≤T≤106 1≤N≤106
示例: 输入: 2 2 5
输出: 1 10 1 10 11 100 101
说明: 测试案例1:从1到2的二进制数字是1和10。
这是必需的输出 输入: 2 2 5
输出: 1 10 1 10 11 100 101
我的输出是: 输入: 1个 3 您的输出是:
这里有人可以告诉我输出错误的原因..
#include<iostream>
#include <stack>
#include <queue>
using namespace std;
int main()
{
int T ;
cin>>T;
while(T--)
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
stack <int > s;
int num=i;
while(num>0)
{
s.push(num%2);
num=num/2 ;
}
for(int j=0;j<s.size();j++)
{
cout<<s.top();
s.pop();
}
cout<<" ";
}
cout<<endl;
}
return 0
这是必需的输出
Input:
2
2
5
Output:
1 10
1 10 11 100 101
我的输出是:
For Input:
1
3
Your Output is:
这里有人可以告诉我输出错误的原因..
答案 0 :(得分:0)
问题在这里:
for(int j=0;j<s.size();j++)
{
cout<<s.top();
s.pop();
}
假设s
有四个元素。
在第一次迭代中,j
为0,s.size()
为4。
在第二个上,j
是1,而s.size()
是3。
在第三个上,j
是2,而s.size()
是2,因此循环终止。
那是两个迭代,而不是四个。
不用计算您要弹出的次数,只需弹出直到堆栈为空:
while (!s.empty())
{
cout << s.top();
s.pop();
}