| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 741 人关注过本帖
标题:请大家帮忙解决一个问题
只看楼主 加入收藏
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
请大家帮忙解决一个问题
这个题目是《C语言解析教程》里面第九章后面的习题
因为我是自学,这个题目不会解,请大家帮忙解答。
题目如下:
   编写一个程序,把 n 个数读入一个数组,然后分行显示不同元素的值及其出现的次数。例如:
输入: -7  3  3  -7  5  5  3
那么程序应该显示:
 5 occurs 2 times
 3 occurs 3 times
-7 occurs 2 times
我目前还只学到数组,所以程序不要太深了,不然看不懂。谢谢。
搜索更多相关主题的帖子: occurs C语言 元素 
2013-07-05 10:27
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
搜索统计字符串中出现的字符次数代码,跟这个类似,你也可以在C primer plus上找到统计字符个数的代码

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-07-05 11:20
Pirelo
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:118
专家分:550
注 册:2011-1-28
收藏
得分:5 
1>输入数组大小
2>输入数组
3>排序
4>计算相同元素个数,并输出:
程序代码:
#include<stdio.h>
#include "stdlib.h"
void main()
{
    //1.input array's size:
    int n;
    printf("input array size n:\n");
    scanf("%d",&n);
    int *array = (int*) malloc(n);

    //2.input array:
    printf("input array:\n");
    int i;
    for(i=0;i<n;i++)
        scanf("%d",&array[i]);

    //3.sort array:
    int temp;
    for(i=0;i<n;i++)
    {
        for(int j=i;j<n;j++)
        {
            if(array[i]>array[j])
            {
                temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }

    //4.ouput the occur times:
    int count = 1;
    for(i=1;i<n;i++)
    {
        if(array[i-1] == array[i])
        {
            count++;
            if(i == n-1)
                printf(" %d occurs %d times\n",array[i],count);
            continue;
        }
        else
        {
            printf(" %d occurs %d times\n",array[i-1],count);
            count = 1;
        }
    }    
    free(array);
    return;
}


[ 本帖最后由 Pirelo 于 2013-7-5 13:08 编辑 ]
2013-07-05 13:04
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:0 
感谢三楼给出的答案,
后面的人不要照着上面的 复制——粘贴——运行。会报错的。
2013-07-05 14:25
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
我调试了一下3楼的代码,并不是完全正确的,会出现程序崩溃

思考赐予新生,时间在于定义
2013-07-05 15:28
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:0 
回复 5楼 love云彩
我说了,不要直接 复制——粘贴——运行  会报错的。
他这样贴出来,是告诉我解题思路,
要是他直接上代码,我说不定看不懂。
2013-07-05 16:03
Pirelo
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:118
专家分:550
注 册:2011-1-28
收藏
得分:0 
以下是引用love云彩在2013-7-5 15:28:17的发言:
 
我调试了一下3楼的代码,并不是完全正确的,会出现程序崩溃

不错,这个程序bug还很多,出现崩溃主要是因为free(array);这一句,我对C语言不是很熟悉,一般喜欢用C++的new和delete;
另外还有其他错误,楼主可以自己测一测,比如:
当输入数组的size为1,即数组只有一个元素时会怎样?
再比如,输入的元素都不一样,这个时候能达到要求么?
 
其实办法有很多,有空再来更新一个
-----------------------------------update--------------------------------------
下面这段代码更绕,不过完全能够满足需求
程序代码:
#include<stdio.h>
#include <stdlib.h>

void main()
{
    printf("input array's size n:\n");
    int n;
    scanf("%d",&n);
    if(n<=0)
    {
        printf("invalid n: %d\n",n);
        return;
    }
   
    printf("input the array:\n");
    //int *array = (int *)malloc(n);
    int *array = new int[n];

    for(int i=0;i<n;i++)
    {   
        scanf("%d",&array[i]);
    }

    int count=1;
    int target;
    bool isCount = false;
    for(i=0;i<n;i++)
    {
        target = array[i];

        for(int j=0;j<i;j++)
        {
            if(target == array[j])
            {
                isCount = true;
                break;
            }
            else
            {
                continue;
            }
        }
        //isCount is false; it means target(array[i]) is not contained in the previous elememts:array[0]~array[i-1]
        if(false == isCount)
        {
            for(int k=i;k<n;k++)
            {
                if(target == array[k] && i != k)
                {
                    count++;
                }
                if(n-1 == k)
                {
                    printf(" %d occurs %d times\n",target,count);
                    isCount = false;
                    count = 1;
                }
            }
        }
        else
        {
            isCount = false;
            continue;
        }
    }
    //free(array);
    delete [] array;
    return;
}



[ 本帖最后由 Pirelo 于 2013-7-5 23:04 编辑 ]
2013-07-05 18:04
秦殇
Rank: 2
等 级:论坛游民
帖 子:61
专家分:77
注 册:2013-3-13
收藏
得分:5 
#include <stdio.h>
#define N 7        //根据需要更改大小即可
main()
{int i,j,a[N]={0},b[N];
for(i=0;i<N;i++)
b[i]=1;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++)
   for(j=i+1;j<N;j++)
   {if(b[i]==0) continue;
       if(a[i]==a[j])
   {b[i]++;
   b[j]=0;}}
for(i=0;i<N;i++)
    {if(b[i]==0) continue;
     printf("%d有%d个\n",a[i],b[i]);
}
}

[ 本帖最后由 秦殇 于 2013-7-6 00:12 编辑 ]
2013-07-05 23:27
快速回复:请大家帮忙解决一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019652 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved