我試了N次了
都不知道為什麼錯在line 1
這是我的測資
6
3 3 4 5 6 1
3 1 4 5 6
1 1 2 2 3 3 4 4
1 2 3 4
3
1 2 2
2 1
5
0 0 0 0 9
0 9
完全不知道為何錯在line 1
程式碼如下:
#include<iostream>
using namespace std;
int main(){
int len;
while(cin >> len){
int n[10]={0},num,count = 0;
for(int i = 0;i < len;i++){
cin >> num;
n[num]++;
}
for(int j = 0;j < 10;j++){
if(n[j] > 0){
count++;
}
}
int a[count],loc = 0;
for(int j = 0;j < 10;j++){
if(n[j] > 0){
a[loc] = n[j];
loc++;
}
}
int temp;
for(int j = 0;j < count;j++){
for(int k = 0;k < count - 1;k++){
if(a[k] >= a[k+1]){
temp = a[k];
a[k] = a[k+1];
a[k+1] = temp;
}
}
}
for(int i = count - 1; i >= 0;){
for(int j = 0; j < 10;j++){
if(a[i] == n[j]){
cout << j << " ";
if(i - 1 >= 0){
if(a[i - 1] != a[i]){
i--;
break;
}
}
i--;
}
}
}
cout << endl;
}
}
我試了N次了
都不知道為什麼錯在line 1
這是我的測資
6
3 3 4 5 6 1
3 1 4 5 6
1 1 2 2 3 3 4 4
1 2 3 4
3
1 2 2
2 1
5
0 0 0 0 9
0 9
完全不知道為何錯在line 1
程式碼如下:
#include
using namespace std;
int main(){
int len;
while(cin >> len){
int n[10]={0},num,count = 0;
for(int i = 0;i < len;i++){
cin >> num;
n[num]++;
}
for(int j = 0;j < 10;j++){
if(n[j] > 0){
count++;
}
}
int a[count],loc = 0;
for(int j = 0;j < 10;j++){
if(n[j] > 0){
a[loc] = n[j];
loc++;
}
}
int temp;
for(int j = 0;j < count;j++){
for(int k = 0;k < count - 1;k++){
if(a[k] >= a[k+1]){
temp = a[k];
a[k] = a[k+1];
a[k+1] = temp;
}
}
}
for(int i = count - 1; i >= 0;){
for(int j = 0; j < 10;j++){
if(a[i] == n[j]){
cout << j << " ";
if(i - 1 >= 0){
if(a[i - 1] != a[i]){
i--;
break;
}
}
i--;
}
}
}
cout << endl;
}
}
連最基本的測資我都試過了
和答案完全一樣,
但錯在Line 1竟然多了個6,可怕
測資無誤。
for(int i = count - 1; i >= 0;){
for(int j = 0; j < 10;j++){
if(a[i] == n[j]){
cout << j << " ";
if(i - 1 >= 0){
if(a[i - 1] != a[i]){
i--;
break;
}
}
i--; //如果這裡i--之後,i<0會發生什麼事?
}
}
}
a[-1]依然可以取值(只是用負數當索引值是相當危險的),這個值不在掌控之中,而又拿來和n[j]比較,因此神奇的事情就發生了。
題外話:
int a[count]; 的寫法換成 int *a=(int *)malloc(sizeof(int)*count); 會好些,因為用可變的變數來當作陣列宣告時的大小並不是標準的語法。
如果是使用Dev-C++撰寫,工具->編譯器選項->呼叫編譯器加入下列的命令中輸入:-ansi -pedantic –W -Wall並且打勾,這樣就會抓出非標準的語法錯誤了。
測資無誤。
for(int i = count - 1; i >= 0;){
for(int j = 0; j < 10;j++){
if(a[i] == n[j]){
cout << j << " ";
if(i - 1 >= 0){
if(a[i - 1] != a[i]){
i--;
break;
}
}
i--; //如果這裡i--之後,i<0會發生什麼事?
}
}
}
a[-1]依然可以取值(只是用負數當索引值是相當危險的),這個值不在掌控之中,而又拿來和n[j]比較,因此神奇的事情就發生了。
題外話:
int a[count]; 的寫法換成 int *a=(int *)malloc(sizeof(int)*count); 會好些,因為用可變的變數來當作陣列宣告時的大小並不是標準的語法。
如果是使用Dev-C++撰寫,工具->編譯器選項->呼叫編譯器加入下列的命令中輸入:-ansi -pedantic –W -Wall並且打勾,這樣就會抓出非標準的語法錯誤了。
謝謝解答