我正在编写一个简单的程序,我使用单个cout
语句获得相同数据的2个输出。我觉得我的循环出了问题,但我无法找到问题所在。如果可能的话,请告诉我需要改变什么;否则,我至少想知道为什么我的逻辑是错误的。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int n ;
cin >> n;
vector<int> arr(n);
vector<int> a(n);
for(int arr_i = 0;arr_i < n;arr_i++){
cin >> arr[arr_i];
a[arr_i]=1;
}
int i,least,flag,count=n;
do{
cout<<count<<endl;
count=0;
flag=1;
for(i=0;i<n;i++){ //for getting least number
if(a[i]){
if(flag){
least=arr[i];
flag=0;
}
if(arr[i]<least){
least=arr[i];
}
}
}
for(i=0;i<n;i++){ // for actual logic
if(arr[i]<=0||!a[i]){
a[i]=0;
//continue;
}
else{
arr[i]-=least;
count++;
}
}
}while(count);
return 0;
}
6
5 4 4 2 2 8
6
4
2
1
6
6
4
4
2
2
1
1
你被给予N
个棍棒,每个棍子的长度是一个正整数。在棒上进行切割操作,使得它们全部减小最小棒的长度。
假设我们有六支以下长度:
5 4 4 2 2 8
然后,在一次切割操作中,我们从六根棍子中的每一根切割出长度为2的切口。对于下一次切割操作,留下四根棒(非零长度),其长度如下:
3 2 2 6
重复上述步骤直到没有留下棍棒。
考虑到N
条的长度,打印每次后续切割操作之前剩余的木棒数量。
注意:对于每次切割操作,您必须重新计算最小的棒的长度(不包括零长度棒)。
答案 0 :(得分:0)
一个注意到的错误:从least
和arr[i]
中减去arr[i]
成为&lt; = 0 a[i]
时仍然保持非零,并且在下一次迭代中,您得到的数量最少与之前的迭代相同。
其他问题:您的count
是前一回合的count
。在第一次迭代时,它等于6,因为条件if(arr[i]<=0||!a[i])
不满足输入中的任何数字。
修好这部分后:
// for actual logic
if (a[i]) {
arr[i] -= least;
if (arr[i] <= 0)
a[i] = 0;
else
count++;
}
看起来效果很好。