#include<iostream> using namespace std; int main() { int n=0,j=0,num[1000]={0};cin>>n>>j; for(int i=0;i<n;i++) { int num1;cin>>num1; num[num1]++; } for(int i=1000;i>0;i++) { n=n-num[1000]; if(n==j) return 0; } }
时间: 2023-12-04 12:06:16 浏览: 226
这段代码有一些问题,首先是在第二个for循环中,应该是i--而不是i++,因为要从1000开始倒序遍历数组。其次,第二个for循环中应该是num[i]而不是num[1000],因为要遍历整个数组,而不只是最后一个元素。最后,如果n小于j,应该输出-1而不是return 0。
下面是修改后的代码:
```c++
#include<iostream>
using namespace std;
int main() {
int n=0,j=0,num[1000]={0};
cin>>n>>j;
for(int i=0;i<n;i++) {
int num1;
cin>>num1;
num[num1]++;
}
for(int i=1000;i>=0;i--) {
n=n-num[i];
if(n<=j) {
cout<<i<<endl;
return 0;
}
}
cout<<"-1"<<endl;
return 0;
}
```
相关问题
解释为什么报错#include <iostream> #include <vector> #include <cmath> using namespace std; int main() { int n=0; int n1=n; cin>>n; int num[10]={0}; for(int i=0;pow(10,i)<n1;i++) { while(num[n%10]==0) { num[n%10]=1; cout<<n%10; } n=n/10; } return 0; }
这段代码存在几个问题:
1. 在定义 `n1` 时,`n` 还未被赋值,所以 `n1` 的值为 0,导致后面的循环条件一直为假,不会执行循环体。
2. 在循环中,用 `pow(10, i)` 来判断是否超过了输入的数值,但是 `pow` 函数返回的是浮点数,可能存在精度问题,导致循环条件不正确。可以使用 `while(n > 0)` 作为循环条件,每次取最后一位数字并削掉该位。
3. 数组 `num` 的长度为 10,但是在循环中并没有对数字进行限制,可能会出现数组越界的情况。可以使用 `bool` 类型的数组代替 `int` 类型的数组,只存储数字是否出现过即可。
下面是修改后的代码:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
int n = 0;
cin >> n;
int num[10] = {0};
while (n > 0) {
int digit = n % 10;
if (num[digit] == 0) {
num[digit] = 1;
cout << digit;
}
n /= 10;
}
return 0;
}
```
这个代码可以输出输入数字中每个不同的数字,例如输入 123321,输出 123。
#include <iostream> using namespace std; void main() { int num = 300; int& ref = num; cout << ref; ref = ref - 100; cout << " " << num; num = num - 50; cout << " " << ref << endl; return 0; }
这段代码存在一些语法错误,修正后的代码如下:
```cpp
#include <iostream>
using namespace std;
int main() {
int num = 300;
int& ref = num;
cout << ref;
ref = ref - 100;
cout << " " << num;
num = num - 50;
cout << " " << ref << endl;
return 0;
}
```
运行结果为:
```
300 200 200
```
第一个问题回答完毕,请继续提问。
阅读全文