| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 933 人关注过本帖
标题:c 小弱求助。。。
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include<stdio.h>
#define row 2
#define col 3

int main()
{
    int list[row][col]={458,45,555,458,55,454};
    int rets[row*col]={-1};
    int i=0,j=0,m=1;
    int *tmp;
    int num=sizeof list/sizeof(int);
    tmp=list[i];
    while(1)
    {
        for(j=1;j<num-i;j++)
        {
            if(*(tmp+j)==*tmp) m++;
        }
        rets[i]=m;
        m=1;
        i++;
        tmp++;
        if(i>=num) break;
    }
    tmp=rets;
    int max=0,k=0;
    for(j=0;j<num;j++)
    {
        if(*(tmp+j)>max)
        {
            max=*(tmp+j);
            k=j;
        }
    }
    tmp=list[0];   
    tmp+=k;
    printf("出现次数最多的数是=%d\n",*tmp);
    return 0;
}
又调试通了一个版本   咋都这么麻烦呢  看20楼的貌似也挺麻烦啊

DO IT YOURSELF !
2012-12-14 22:00
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
改快了一些。。。
程序代码:
#include <stdio.h>
#include <string.h>
#define M 3
#define N 3
#define Mount (M * N)
struct Flag
{
    int key;
    int count;
}flag[Mount];
int InitFlag(int a[M][N])
{
    int i, j, k, temp, max = 0;
    for (i = 0;i < M;i++)
    {
        for (j = 0;j < N;j++)
        {
            temp = a[i][j] % Mount;
            if (!flag[temp].key || a[i][j] == flag[temp].key)
            {
                flag[temp].key = a[i][j];
                flag[temp].count += 1;
                if (max < flag[temp].count)
                {
                    max = flag[temp].count;
                    k = temp;
                }
                continue;
            }
            while (flag[temp].key && a[i][j] != flag[temp].key)
                temp = (temp + 1) % Mount;
            flag[temp].key = a[i][j];
            flag[temp].count += 1;
            if (max < flag[temp].count)
            {
                max = flag[temp].count;
                k = temp;
            }
        }
    }
    return k;
}
int main()
{
    int a[M][N] = {1, 14, 3, 14, 14, 5, 16, 5, 7};
    memset(flag, 0, sizeof(flag));
    int i = InitFlag(a);
    printf("&sup3;&ouml;&Iuml;&Ouml;&acute;&Icirc;&Ecirc;&yacute;×&icirc;&para;à&micro;&Auml;&Ecirc;&Ccedil;&pound;&ordm;%d\n", flag[i].key);
    return 0;
}


[fly]存在即是合理[/fly]
2012-12-14 22:38
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
#include<stdio.h>
#define max1 3//设置二维数组大小
#define max2 3

int main()
{
    int list[max1][max2];
    int count[max1*max2][2];//放置不同元素和次数,行数为list的元素个数
    int i,j,m;
    int busy,flag;//不同元素个数

    for(i=0;i<max1*max2;i++)
        count[i][1]=0;     //次数置零
    for(i=0;i<max1;i++)    //输入
    {    for(j=0;j<max2;j++)
        {
            printf("Enter list[%d][%d]",i,j);
            scanf("%d",&list[i][j]);
        }
    }
    printf("array list:\n");  //输出
    for(i=0;i<max1;i++)
    {
        for(j=0;j<max2;j++)
            printf("%5d",list[i][j]);
        printf("\n");
    }
    for(i=0;i<max1;i++)//双循环遍历二维数组
    {
        for(j=0;j<max2;j++)
        {
            if(i==0&&j==0)//给count第一行赋初值
            {
                count[0][0]=list[0][0];//初值
                count[0][1]=1;//一次
                flag=1;//一个元素
                continue;
            }
            for(m=0;m<flag;m++)//遍历数组count已有的元素
            {
                if(list[i][j]==count[m][0])//如果元素已在count里
                {
                    count[m][1]++;//次数加一
                    break;
                }
            }
            if(m==flag)//如果元素不在count里
            {
                count[m][0]=list[i][j];//向已有元素后面添加新元素
                count[m][1]++;//次数加一
                flag++;//元素个数加一
            }
        }
    }
    for(i=0;i<flag;i++)//打印个元素和次数
        printf("%d : %d times\n",count[i][0],count[i][1]);
    busy=0;//先让第一个元素为频率最大的数
    for(i=1;i<flag;i++)//循环遍历
        if(count[busy][1]<count[i][1])
            busy=i;//找到频率最大的数的一个位置
    printf("Maximum number : ");
    for(i=0;i<flag;i++)
    if(count[i][1]==count[busy][1])//打印频率最大的数
        printf("%d ",count[i][0]);
    printf("\n");
}
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 小小战士 于 2012-12-15 14:52 编辑 ]

小小战士,战士中的战斗机!
2012-12-15 01:29
小弱
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-12-14
收藏
得分:0 
回复 23楼 小小战士
还麻烦你写这么简易的版本给我。。。。。。。
谢谢。。。。。。。。。。。。。。。。
2012-12-15 10:15
小弱
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-12-14
收藏
得分:0 
回复 23楼 小小战士
for(i=1;i<flag;i++)//循环遍历
        if(count[0][1]<count[i][1])
            busy=i;//找到频率最大的数的一个位置

这个是让count[i][1]一直跟count[0][1]比较么。。。 只要比count[0][1]大  busy就被赋为i  这样能找到频率最大的数的位置么。。。

后面 如果找到了 不能直接打印count[busy][0]么。。。。。。。。。。。。。。。。
2012-12-15 11:19
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
以下是引用小弱在2012-12-15 11:19:55的发言:

for(i=1;i<flag;i++)//循环遍历
        if(count[0][1]<[color=count[i][1])
            busy=i;//找到频率最大的数的一个位置

这个是让count[1]一直跟count[0][1]比较么。。。 只要比count[0][1]大  busy就被赋为i  这样能找到频率最大的数的位置么。。。

后面 如果找到了 不能直接打印count[0]么。。。。。。。。。。。。。。。。


count[max1*max2][2]的列和list[max1][max2]的元素个数相等,是确保如果list的元素全不一样时能放得下,count的第0列放的是不行同的元素,第1列放的是对应的次数,flag是最终count里不同元素的个数,也就是最后一行有效元素的行值(0~flag-1)加一,比如count的第0列有3个不同元素,那么flag就是2(从第0行到第2行),这些看懂了吗?

解释上面的for循环:
for(i=1;i<flag;i++)
//循环遍历count数组,只按行遍历,且不遍历第0行,因为上面有busy=0,也就是先让busy=0标志count[0][0]为频率最大的数,为下面的比较和标志做准备
        if(count[busy][1]<count[i][1])//这里改了下,意识到这是一个小错误,现在改对了
//以count的第0行第0列的元素作为基数,也就是count[busy][0],比较的是对应元素的次数,如果次数比count[0][1]大,那么对应的i值就赋给busy,如果有多个次数相等也就是频率都是最大的数,那么busy得到的就是最后一个频率最大数的行,那么下面打印的时候,只要比较count[i][1]==count[busy][1],就能得到所有次数相等也就是频率都是最大的数了,打印出来就是了
            busy=i;//找到频率最大的数的一个位置
//busy=i就是标志第一个频率最大的数的行,带到if中去比较,因为是<,所以只要有更大的次数,busy又标记i,最终busy得到的是第一个最大次数的行号,不直接打印,是考虑到有多个次数相等且频率都是最大的数,如果最大频率数为一个,那么busy得到的就是这个频率最大数的行,如果最大频率数为多个,那么busy得到的就是第一个频率最大数的行号,下面比较打印就是了

只要找到了,直接打印,确保不了后面还有比这个次数更大的次数,所以不能直接打印
现在明白了吗?

[ 本帖最后由 小小战士 于 2012-12-15 14:49 编辑 ]

小小战士,战士中的战斗机!
2012-12-15 14:45
小弱
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-12-14
收藏
得分:0 
回复 26楼 小小战士
明白了。。。。
明白了。。。
战斗机。。。
2012-12-15 14:59
快速回复:c 小弱求助。。。
数据加载中...
 
   



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

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