| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 403 人关注过本帖
标题:高手快来给我详细注释一下啊!
只看楼主 加入收藏
蔡梓锋
Rank: 4
等 级:业余侠客
帖 子:106
专家分:202
注 册:2013-4-20
结帖率:100%
收藏
 问题点数:0 回复次数:2 
高手快来给我详细注释一下啊!
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define N 21
void ncf();
void fun();
int z[10][N+1];
void main()
{
    int start=time(NULL),end;
    printf("程序开始运行!\n");
    ncf();
    fun();
    end=time(NULL);
    printf("这个程序共运行了%d秒!\n",end-start);
}

void ncf()
{
    int temp,i,j,m;
    for(i=0;i<10;i++)
    {
        z[i][0]=1;
    }
    for(i=0;i<10;i++)/*分别求出1到9的21次方的值出来*/
    {    
        for(j=0;j<N;j++)
        {
            m=0;
            temp=0;
            for(m=0;m<N;m++)
            {
                temp=temp/10+z[i][m]*i;
                z[i][m]=temp%10;
            }
        }
    }
    for(i=0;i<10;i++)/*找到1到9的最高位,保存在每个数的z[i][N]*/
    {
        for(j=N;j>=0;j--)
            if(z[i][j]!=0)
                break;
        z[i][N]=j+1;
    }

    /*for(i=0;i<10;i++)
    {printf("i=%d\n",i);
        for(j=0;j<N+1;j++)
            printf("%5d",z[i][j]);
        printf("\n");
    }*/
}

void fun()
{
    int a[N]={0},b[N]={0},c[N]={0},d[10]={0},i,j,x,temp,f=0;
    a[N-1]=1;
    while(a[0]!=9)
    {
        //求和!
        for(i=0;i<N;i++)
        {
            temp=0;
            for(x=0;x<N;x++)//将二维数组进行求和运算。每列的结果存到b【x】(不知道这个解释是否对)
            {
                temp=b[x]+z[a[i]][x]+temp;
                b[x]=temp%10;
                temp=temp/10;
                if(temp==0&&x>=z[a[i]][N])
                    break;
            }
        }
        
        for(i=0;i<N;i++)//这个好像是统计b【1到9】出现次数;
            d[b[i]]++;
        x=0;
        for(i=0;i<10;i++)
        {
            for(j=0;j<d[i];j++)
            {
                c[x]=i;
                x++;
            }
        }
        
        f=0;
        for(i=0;i<N;i++)
        {
            if(a[i]!=c[i])
            {
                f=a[i]-c[i];
                break;
            }
        }
        !
        if(f==0&&b[N-1]>=1&&b[N-1]<=9)
        {
            for(i=N-1;i>=0;i--)
                printf("%d",b[i]);
            printf("\n");
        }
        for(i=N-1;i>0;i--)
        {
            if(a[i]!=9)
                break;
        }
        temp=a[i];
        while(i<N)
        {
            a[i]=temp+1;
            i++;
        }
        for(i=0;i<N;i++)
        {
            b[i]=0;
            c[i]=0;
        }
        for(i=0;i<10;i++)
        {
            d[i]=0;
        }
    }
}
2013-06-24 19:21
蔡梓锋
Rank: 4
等 级:业余侠客
帖 子:106
专家分:202
注 册:2013-4-20
收藏
得分:0 
一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。
例如:
当N=3时,153就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水仙花数(其中,“^”表示乘方,5^3表示5的3次方,也就是立方)。
当N=4时,1634满足条件,因为 1^4 + 6^4 + 3^4 + 4^4 = 1634。
当N=5时,92727满足条件。
实际上,对N的每个取值,可能有多个数字满足条件。

程序的任务是:求N=21时,所有满足条件的花朵数。注意:这个整数有21位,它的各个位数字的21次方之和正好等于这个数本身。
如果满足条件的数字不只有一个,请从小到大输出所有符合条件的数字,每个数字占一行。因为这个数字很大,请注意解法时间上的可行性。要求程序在3分钟内运行完毕。


这里开始就看不懂了。
for(i=0;i<10;i++)
        {
            for(j=0;j<d[i];j++)
            {
                c[x]=i;
                x++;
            }
        }
        
        f=0;
        for(i=0;i<N;i++)
        {
            if(a[i]!=c[i])
            {
                f=a[i]-c[i];
                break;
            }
        }
        
        if(f==0&&b[N-1]>=1&&b[N-1]<=9)
        {
            for(i=N-1;i>=0;i--)
                printf("%d",b[i]);
            printf("\n");
        }
        for(i=N-1;i>0;i--)
        {
            if(a[i]!=9)
                break;
        }
        temp=a[i];
        while(i<N)
        {
            a[i]=temp+1;
            i++;
        }
        for(i=0;i<N;i++)
        {
            b[i]=0;
            c[i]=0;
        }
        for(i=0;i<10;i++)
        {
            d[i]=0;
        }
    }
}

加油加油!
2013-06-24 19:23
蔡梓锋
Rank: 4
等 级:业余侠客
帖 子:106
专家分:202
注 册:2013-4-20
收藏
得分:0 
也请高手看看我那些解释是否正确严谨。拜托了

加油加油!
2013-06-24 19:24
快速回复:高手快来给我详细注释一下啊!
数据加载中...
 
   



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

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