| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 410 人关注过本帖
标题:有哪位高手帮我分析一下这个c语言程序 尽量详细
只看楼主 加入收藏
bball27
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-3-29
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
有哪位高手帮我分析一下这个c语言程序 尽量详细

#include<stdio.h>
#include<io.h>
#include<string.h>
#include<stdlib.h>
#define L 5
#define H 20000
int hh;
int hjqs,hjqt;
int dsh;//倒数第几个数

void showa(int m,int n, int sz[][L])
{
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%d ",sz[i][j]);
            
        }
        printf("\n");
    }
}

void ftoi(char *lj,int sj[][L])
{
    FILE *fp;
    char tp[100],*p;
    int i,n;
    fp=fopen(lj,"r+");
    for(n=0;feof(fp)==0;n++)
    {
        tp[0]=0;
        fgets(tp,100,fp);
        if(strlen(tp)<2)break;
        p=&tp[strlen(tp)];
            for(i=1;(*p)!='\t';p--)
            {
                if((*p)>='0'&&(*p)<='9')
                {
                    sj[n][L-i]=(*p)-'0';
                    i++;
                }
            }
    }
    fclose(fp);
    hh=n;
}
 

int chuxian(int a,int n,int *s)//s数组中最后n个数中是否出现a
{
    int i;
    for(i=L-n;i<L;i++)
    {
        if(s[i]==a)return 1;
    }
    return 0;
}

int fun1(int a,int sj[][L])//在每行的最后 3 个数中最多有连续几行没有出现a
{
    int n,nn;
    int i,j;
    n=nn=0;
    for(i=0;i<hh;i++)
    {
        if(chuxian(a,3,sj[i])==0)nn++;
        else
        {
            if(nn>n)n=nn;
            nn=0;
        }
    }
    return n>nn?n:nn;
}

struct tt
    {
        int a[10];
        int an;
    };
   

int mfun2(int sj[][L],int n,int *ii)//从第ii行开始往上统计每行最后一个数共出现n个时再上面一行的所有数是否都是已出现过的那n个数;
                                    //成立返回1,不成立返回0,已到达数据顶部,无法再判断返回-1;并返回判断后停留的行号;
{
    int i,j;
    struct tt hjq={0,1,2,3,4,5,6,7,8,9,0};
   
    for(i=(*ii);1;i--)
    {   if(i<0)
        {
            //printf("-1 %d→%d\n",i,*ii);
            return -1;
        }
        else if(hjq.an==n)break;

        if(hjq.a[sj[i][L-dsh]]!=-1)
        {
            hjq.a[sj[i][L-dsh]]=-1;
            hjq.an++;
        }
    }

    //for(j=0;j<L;j++)
    //{
        if(hjq.a[sj[i][L-dsh]]!=-1)//检查该行倒数第dsh个数
        {
            //printf("0 %d→%d\n",i,*ii);
            *ii=i;
            return 0;
        }
    //}
    //printf("1 %d→%d\n",*ii,i);
    *ii=i;
    return 1;
}


int fun2(int sj[][L],int n)//统计 从最后一行起,每行最后一个数有不同的n个时,再上面一行所有数都是已出现过的数 的情况连续出现最多的次数
{
    int i,m;
    int x,x0;
    int tj=0;
    int hjqts,hjqtt,ii[2];
    int *cp,nn;
    x=x0=0;
    cp=(int*)calloc(hh,sizeof(int));
    for(i=hh-1;(m=mfun2(sj,n,&i))!=-1;ii[0]=i-1,ii[1]=m,i--)
    {

        if(m)
        {
            if(x0==0&&ii[1]==0)
            {
                hjqts=ii[0];
            }
            hjqtt=i;
            x0++;
            tj++;
        }
        else
        {
            (*(cp+x0-1))++;
            if(x0>x)
            {
                hjqt=hjqtt;
                hjqs=hjqts;
                x=x0;
            }
            x0=0;
        }
    }
    if(m==1)  (*(cp+x0-1))++;
    for(nn=(x>x0?x:x0);
        nn>=1;nn--){
        printf("连续%d次不中共有%d次\n",nn,*(cp+nn-1));
    }
    //free(cp);
    //printf("满足条件的有%d条。\n",tj);
    return (x>x0?x:(hjqt=hjqtt,hjqs=hjqts,x0));
}

int fun3(int sj[][L],int n,int m)//9个数字中有不同的n个数字,每行读取倒数m个数组成方阵
{
    int i,j,q,kj,kj0;
    int ii[2]={0,0},sum,sum0;
    int hjqss,hjqtt;
    sum=sum0=0;
    //for(q=hh-1;q>0;q-=m+1)
    for(i=hh-1;i>0;)
    {

        struct tt hjq={0,1,2,3,4,5,6,7,8,9,0};
        kj=1;
        if(ii[0]==0)
        {
            if(ii[1]==1)
                {

                    if(sum<sum0){
                        sum=sum0;
                        hjqs=hjqss;
                        hjqt=hjqtt+1;
                    }
                    sum0=0;
                }
        }
        else
        {
            if(ii[1]==0)hjqss=i;
            hjqtt=i;
            sum0++;
        }
        ii[1]=ii[0];
        kj0=1;
        for(;i>0;i--)
        {
            for(j=L-1;j>=L-m;j--)
            {
                if(hjq.an==n){kj0=0;break;}
                if(hjq.a[sj[i][j]]!=-1){
                   hjq.a[sj[i][j]]=-1;
                   hjq.an++;
                }
            }
            if(kj0==0)break;
        }
        
        if(hjq.an<n){ii[0]=0;break;}
        if(hjq.an>n)
        {
            ii[0]=0;
            continue;
        }
        for(j=L-1;j>=L-m;j--)
        {
            if(hjq.a[sj[i][j]]!=-1)
            {
                ii[0]=0;
                kj=0;
                break;
            }
            
        }
        if(kj==1)ii[0]=1;
    }
   
    return (sum>sum0?sum:sum0);
   
}


int main(){
    int sj[H][L];
    int i,n;
    char lj[]="hjq.txt";
    if(access(lj,1)!=0)
    {
        puts("数据文件不存在!\n请将数据放到本程序同一目录下的hjq.txt文件中。\n\n");
        //system("pause");
        return 0;
    }
    ftoi(lj,sj);
    //printf("%d %d %d %d %d\n",sj[hh-1][0],sj[hh-1][1],sj[hh-1][2],sj[hh-1][3],sj[hh-1][4]);
    //showa(hh,L,sj);
    puts("");/*
    for(i=0;i<=9;i++)
        printf("%d 最多连续%d行没有出现。\n",i,fun1(i,sj));
    printf("\n\n");
    dsh=4;
    printf("最多连续不中次数为%d次。\n",fun2(sj,5));
    printf("所在行分别为 %d→%d \n\n",hjqs,hjqt);
    */
    printf("%d\n",fun3(sj,5,3));
    printf("所在行分别为 %d→%d \n\n",hjqs,hjqt);
    system("pause");
    return 0;
}

[ 本帖最后由 bball27 于 2010-3-29 16:42 编辑 ]
搜索更多相关主题的帖子: c语言 
2010-03-29 16:40
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:5 
这个程序你自己看过吗?
试着在电脑上编译过吗?
试着运行一下看看是什么输出结果吗?
如果你自己都没有或者不愿做过上面这些步骤
那么你到底想让我给你分析解释什么呢?
我又怎么可能愿意浪费自己的时间帮你做连你自己都懒得干的事情呢?

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2010-03-30 11:36
scorego
Rank: 2
等 级:论坛游民
帖 子:26
专家分:20
注 册:2010-1-28
收藏
得分:5 
注意写注释
没有注释的话除了你估计没有几个能完全看懂程序
2010-03-30 12:22
shaojila8888
Rank: 2
等 级:论坛游民
帖 子:9
专家分:27
注 册:2010-3-29
收藏
得分:5 
你个 程序的 题目是什么?
而且编译出现的问题是什么? 都没有注释 怎么让我们帮助你?
你是不是 发出来 来显摆的?
2010-03-30 18:52
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
收藏
得分:5 
接分。

想象力征服世界
2010-03-30 18:54
快速回复:有哪位高手帮我分析一下这个c语言程序 尽量详细
数据加载中...
 
   



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

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