小白请教一下这段代码哪里出错了,这道题一直过不了

Tony5t4rk 2017-12-01 03:30:20
#include <iostream>
int a[1000000];
int main()
{
using namespace std;
int n,d=11;
int b[11]={-5,-4,-3,-2,-1,0,1,2,3,4,5};
int c[12]={0,0,0,0,0,0,0,0,0,0,0,0};
cin>>n;
for (int i = 0; i < n; ++i)
{
cin>>a[i];
for (int j = 0; j < 11; ++j)
{
if (a[i]==b[j])
{
c[j]++;
}
}
}
for (int k = 0; k < 11; ++k)
{
if (c[k]>c[k+1])
{
c[k+1]=c[k];
if (d==11)
{
d=k;
}
}else if (c[k]<c[k+1])
{
d=k+1;
}else if (c[k]==c[k+1])
{
if (b[d]>b[k+1])
{
d=k+1;
}
}
}
cout<<b[d];
return 0;
}


...全文
254 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-12-02
  • 打赏
  • 举报
回复
#include <iostream>


#define     MAX_SIZE    11

int main()
{
    using namespace std;

    int *arr, n, cnt[MAX_SIZE] = { 0 };
    int i, maxv, maxi;


    cout<<"Please input the number: ";
    cin>>n;

    arr = new int[n];

    i = 0;
    while (i < n) {
        cin>>arr[i];
        if (arr[i] < -5 || arr[i] > 5)
            continue;
        if (arr[i] <= 0)
            cnt[arr[i] + 5]++;
        else
            cnt[arr[i] + 5]++;
        i++;
    }

    maxv = cnt[0];
    maxi = 0;
    for (i = 0; i < MAX_SIZE; i++) {
        if (maxv < cnt[i])
            maxi = i;
        cout<<"cnt["<<i<<"] = " << cnt[i]<<endl;
    }

    cout<<maxi-5<<endl;

    /*
    int n,d=11;
    int b[11] = {-5,-4,-3,-2,-1,0,1,2,3,4,5};
    int c[12] = {0};
    int *a = NULL;
    cin>>n;

    a = new int[n];
    for (int i = 0; i < n; ++i)
    {
        cin>>a[i];
        for (int j = 0; j < 11; ++j)
        {
            if (a[i]==b[j])
            {
                c[j]++;
            }
        }
    }
    for (int k = 0; k < 11; ++k)
    {
        if (c[k]>c[k+1])
        {
            c[k+1]=c[k];
            if (d==11)
            {
                d=k;
            }
        }else if (c[k]<c[k+1])
        {
            d=k+1;
        }else if (c[k]==c[k+1])
        {
            if (b[d]>b[k+1])
            {
                d=k+1;
            }
        }
    }
    cout<<b[d];
    */
    return 0;
}
参考一下吧; 不建议一次性定义这么大的数组,既然可以动态申请,那么没必要申请静态的数组;数组太大只会浪费空间,即使动态申请也可以支持100000个数 根据数组下表和-5~5之间的一个对应关系,这样做会更好一些;
Tony5t4rk 2017-12-02
  • 打赏
  • 举报
回复
引用 5 楼 cfjtaishan 的回复:
[quote=引用 4 楼 Tony5t4rk 的回复:] [quote=引用 3 楼 cfjtaishan 的回复:]
#include <iostream>


#define     MAX_SIZE    11

int main()
{
    using namespace std;

    int *arr, n, cnt[MAX_SIZE] = { 0 };
    int i, maxv, maxi;


    cout<<"Please input the number: ";
    cin>>n;

    arr = new int[n];

    i = 0;
    while (i < n) {
        cin>>arr[i];
        if (arr[i] < -5 || arr[i] > 5)
            continue;
        if (arr[i] <= 0)
            cnt[arr[i] + 5]++;
        else
            cnt[arr[i] + 5]++;
        i++;
    }

    maxv = cnt[0];
    maxi = 0;
    for (i = 0; i < MAX_SIZE; i++) {
        if (maxv < cnt[i])
            maxi = i;
        cout<<"cnt["<<i<<"] = " << cnt[i]<<endl;
    }

    cout<<maxi-5<<endl;

    /*
    int n,d=11;
    int b[11] = {-5,-4,-3,-2,-1,0,1,2,3,4,5};
    int c[12] = {0};
    int *a = NULL;
    cin>>n;

    a = new int[n];
    for (int i = 0; i < n; ++i)
    {
        cin>>a[i];
        for (int j = 0; j < 11; ++j)
        {
            if (a[i]==b[j])
            {
                c[j]++;
            }
        }
    }
    for (int k = 0; k < 11; ++k)
    {
        if (c[k]>c[k+1])
        {
            c[k+1]=c[k];
            if (d==11)
            {
                d=k;
            }
        }else if (c[k]<c[k+1])
        {
            d=k+1;
        }else if (c[k]==c[k+1])
        {
            if (b[d]>b[k+1])
            {
                d=k+1;
            }
        }
    }
    cout<<b[d];
    */
    return 0;
}
参考一下吧; 不建议一次性定义这么大的数组,既然可以动态申请,那么没必要申请静态的数组;数组太大只会浪费空间,即使动态申请也可以支持100000个数 根据数组下表和-5~5之间的一个对应关系,这样做会更好一些;
为什么使用动态数组使用了31460的内存。而使用int a[1000000];却使用了5604的内存[/quote] 额,你看到了吗?你的代码里和我的代码顺序反了。你是把申请空间放在cin>>n前面了。n是随机数,所以申请的空间打了。 我把arr = new int[n];放在cin>>n;后面就是先输入n在去申请空间。[/quote] OK,OK。是我蠢了谢谢
自信男孩 2017-12-02
  • 打赏
  • 举报
回复
引用 4 楼 Tony5t4rk 的回复:
[quote=引用 3 楼 cfjtaishan 的回复:]
#include <iostream>


#define     MAX_SIZE    11

int main()
{
    using namespace std;

    int *arr, n, cnt[MAX_SIZE] = { 0 };
    int i, maxv, maxi;


    cout<<"Please input the number: ";
    cin>>n;

    arr = new int[n];

    i = 0;
    while (i < n) {
        cin>>arr[i];
        if (arr[i] < -5 || arr[i] > 5)
            continue;
        if (arr[i] <= 0)
            cnt[arr[i] + 5]++;
        else
            cnt[arr[i] + 5]++;
        i++;
    }

    maxv = cnt[0];
    maxi = 0;
    for (i = 0; i < MAX_SIZE; i++) {
        if (maxv < cnt[i])
            maxi = i;
        cout<<"cnt["<<i<<"] = " << cnt[i]<<endl;
    }

    cout<<maxi-5<<endl;

    /*
    int n,d=11;
    int b[11] = {-5,-4,-3,-2,-1,0,1,2,3,4,5};
    int c[12] = {0};
    int *a = NULL;
    cin>>n;

    a = new int[n];
    for (int i = 0; i < n; ++i)
    {
        cin>>a[i];
        for (int j = 0; j < 11; ++j)
        {
            if (a[i]==b[j])
            {
                c[j]++;
            }
        }
    }
    for (int k = 0; k < 11; ++k)
    {
        if (c[k]>c[k+1])
        {
            c[k+1]=c[k];
            if (d==11)
            {
                d=k;
            }
        }else if (c[k]<c[k+1])
        {
            d=k+1;
        }else if (c[k]==c[k+1])
        {
            if (b[d]>b[k+1])
            {
                d=k+1;
            }
        }
    }
    cout<<b[d];
    */
    return 0;
}
参考一下吧; 不建议一次性定义这么大的数组,既然可以动态申请,那么没必要申请静态的数组;数组太大只会浪费空间,即使动态申请也可以支持100000个数 根据数组下表和-5~5之间的一个对应关系,这样做会更好一些;
为什么使用动态数组使用了31460的内存。而使用int a[1000000];却使用了5604的内存[/quote] 额,你看到了吗?你的代码里和我的代码顺序反了。你是把申请空间放在cin>>n前面了。n是随机数,所以申请的空间打了。 我把arr = new int[n];放在cin>>n;后面就是先输入n在去申请空间。
Tony5t4rk 2017-12-02
  • 打赏
  • 举报
回复
引用 3 楼 cfjtaishan 的回复:
#include <iostream>


#define MAX_SIZE 11

int main()
{
using namespace std;

int *arr, n, cnt[MAX_SIZE] = { 0 };
int i, maxv, maxi;


cout<<"Please input the number: ";
cin>>n;

arr = new int[n];

i = 0;
while (i < n) {
cin>>arr[i];
if (arr[i] < -5 || arr[i] > 5)
continue;
if (arr[i] <= 0)
cnt[arr[i] + 5]++;
else
cnt[arr[i] + 5]++;
i++;
}

maxv = cnt[0];
maxi = 0;
for (i = 0; i < MAX_SIZE; i++) {
if (maxv < cnt[i])
maxi = i;
cout<<"cnt["<<i<<"] = " << cnt[i]<<endl;
}

cout<<maxi-5<<endl;

/*
int n,d=11;
int b[11] = {-5,-4,-3,-2,-1,0,1,2,3,4,5};
int c[12] = {0};
int *a = NULL;
cin>>n;

a = new int[n];
for (int i = 0; i < n; ++i)
{
cin>>a[i];
for (int j = 0; j < 11; ++j)
{
if (a[i]==b[j])
{
c[j]++;
}
}
}
for (int k = 0; k < 11; ++k)
{
if (c[k]>c[k+1])
{
c[k+1]=c[k];
if (d==11)
{
d=k;
}
}else if (c[k]<c[k+1])
{
d=k+1;
}else if (c[k]==c[k+1])
{
if (b[d]>b[k+1])
{
d=k+1;
}
}
}
cout<<b[d];
*/
return 0;
}

参考一下吧;

不建议一次性定义这么大的数组,既然可以动态申请,那么没必要申请静态的数组;数组太大只会浪费空间,即使动态申请也可以支持100000个数

根据数组下表和-5~5之间的一个对应关系,这样做会更好一些;




为什么使用动态数组使用了31460的内存。而使用int a[1000000];却使用了5604的内存
Tony5t4rk 2017-12-01
  • 打赏
  • 举报
回复
引用 1 楼 icewebar 的回复:

#include <stdio.h>
#include <iostream>


using namespace std;

int main(){
unsigned int n = 0;
unsigned int index = 0;
int maxtimes = 0;
int resultnum = -5;
int tempnum = -5;
int record[11] = {0};

cout<<"please intput the num"<<endl;
cin>>n;
do{
	cin>>tempnum;
	record[tempnum + 5]++;
	if(record[tempnum + 5] > maxtimes){
		resultnum = tempnum;
		maxtimes = record[tempnum + 5];
	}else if(record[tempnum + 5] == maxtimes){
		if(tempnum < resultnum){
			resultnum = tempnum;
		}
	}
	index++;
}while(index < n) ;

cout<<"the result num is "<<resultnum<<endl;

}
试了一下应该可以吧。
谢谢,我知道这题有其他更好的解法,但我想知道的是我写的代码在哪里出错了,这样可以帮助我更改一些平时的错误,以后也能注意一下。
icewebar 2017-12-01
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <iostream>


using namespace std;

int main(){
unsigned int n = 0;
unsigned int index = 0;
int maxtimes = 0;
int resultnum = -5;
int tempnum = -5;
int record[11] = {0};

cout<<"please intput the num"<<endl;
cin>>n;
do{
	cin>>tempnum;
	record[tempnum + 5]++;
	if(record[tempnum + 5] > maxtimes){
		resultnum = tempnum;
		maxtimes = record[tempnum + 5];
	}else if(record[tempnum + 5] == maxtimes){
		if(tempnum < resultnum){
			resultnum = tempnum;
		}
	}
	index++;
}while(index < n) ;

cout<<"the result num is "<<resultnum<<endl;

}
试了一下应该可以吧。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧