| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2678 人关注过本帖
标题:输入一个正整数N,要求满足题目条件
只看楼主 加入收藏
bc121189971
Rank: 2
来 自:深圳
等 级:论坛游民
帖 子:29
专家分:36
注 册:2010-9-27
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:29 
输入一个正整数N,要求满足题目条件
题目的要求是输入一个正整数N,范围在0~100000000(1亿)之间,系统再将N转换成另一个正整数Q,并输出Q的数值

而Q的数值的满足条件为:Q每一位的数值上的数字连乘结果要等于N本身,且Q要取满足该条件的最小正整数!

例如我输入N为10,则系统会生成52,25两个数字
最后输出Q为较小的正整数25!

现在贴出我所实现的代码:
程序代码:
#include<stdio.h>
void main()
{
    int n,bmp;
    int a[30],i,j,k,t=1;
    int num=0,num2=0,num3=0,num5=0,num7=0;


    for (;;i++)
    {
        num=0;num2=0;num3=0;num5=0;num7=0;         
begin:
    scanf("%d",&n);
    if ( n>1000000000 || n<=0 )                       
    {
        printf("ERROR!&Ouml;&Oslash;&ETH;&Acirc;&Ecirc;&auml;&Egrave;&euml;!\n");
        goto begin;
    }

    else if (n>0&&n<10)                           
    {
        printf("Q&micro;&Auml;&Ecirc;&yacute;&Ouml;&micro;&Icirc;&ordf;1%d!\n\n",n);
        goto exit;
    }




   
    else if (n>=10)                                    
     {

        for (;;i++)                           
        {
            if ( n%2==0 && n!=2 )
            {num2+=1;n/=2;
            }
            else if ( n%3==0 && n!=3 )
            {num3+=1;n/=3;
            }
            else if ( n%5==0 && n!=5 )
            {num5+=1;n/=5;
            }
            else if ( n%7==0 && n!=7 )
            {num7+=1;n/=7;
            }
           
            if (n==2)                               
            {num2+=1;break;
            }
            if (n==3)
            {num3+=1;break;
            }
            if (n==5)
            {num5+=1;break;
            }
            if (n==7)
            {num7+=1;break;
            }
           
            if ( n%2!=0 &&
                 n%3!=0 &&
                 n%5!=0 &&
                 n%7!=0 )                           
            {printf("&Icirc;&THORN;&frac12;&acirc;!");goto exit;
            }
        }
    }


    

    for (i=0;i<30;i++) a[i]=1;                      

    for (i=0;i<(num+num2);i++) a[i]=2;              
    num+=num2;
    for (i=num;i<(num+num3);i++) a[i]=3;           
    num+=num3;
    for (i=num;i<(num+num5);i++) a[i]=5;           
    num+=num5;
    for (i=num;i<(num+num7);i++) a[i]=7;            




    for (k=0;k<30;k++)
    {
        if ((a[k]*a[k+1])<10)
        {
            a[k+1]=a[k+1]*a[k];
            a[k]=1;
            t++;
        }
        if ( (a[k]*a[k+1])>=10 && t>0 )
        {
            for (i=0;i<29;i++)
            {
                for (j=0;j<29-i;j++)
                {
                    if (a[j]>a[j+1])
                    {
                        bmp=a[j];
                        a[j]=a[j+1];
                        a[j+1]=bmp;
                    }
                    else
                        continue;
                }
            }
        }
    }

//    for (i=0;i<30;i++) printf("%2d",a[i]);   
//    printf("\n\n");


    printf("Q&micro;&Auml;&Ecirc;&yacute;&Ouml;&micro;&Icirc;&ordf;");
    for (i=0;i<30;i++)
    {
        if (a[i]==1) continue;
        printf("%d",a[i]);
       
    }
    printf("!\n\n");
   
}


exit:
    printf("\n");
   
}

基本的N数值都可以正常输出,但是还有一些比较纠结的问题
像我输入100000000与1000000000等数值就会产生错误的数值Q

换句话说,我代码中的冒泡排序出了点错误

麻烦高手解惑!
搜索更多相关主题的帖子: 整数 条件 输入 
2010-10-25 13:40
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:1 
好长 懒得看

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-10-25 13:40
bc121189971
Rank: 2
来 自:深圳
等 级:论坛游民
帖 子:29
专家分:36
注 册:2010-9-27
收藏
得分:0 
#include<stdio.h>
void main()
{
    int n,bmp;
    int a[30],i,j,k,t=1;
    int num=0,num2=0,num3=0,num5=0,num7=0;


    for (;;i++)
    {
        num=0;num2=0;num3=0;num5=0;num7=0;           //&Ograve;ò×&Oacute;&Ccedil;&aring;&Aacute;&atilde;
begin:
    scanf("%d",&n);
    if ( n>1000000000 || n<=0 )                      //&acute;í&Icirc;ó&Ecirc;&auml;&Egrave;&euml;&Aring;&ETH;&para;&Iuml;
    {
        printf("ERROR!&Ouml;&Oslash;&ETH;&Acirc;&Ecirc;&auml;&Egrave;&euml;!\n");
        goto begin;
    }

    else if (n>0&&n<10)                              //&Ograve;&raquo;&Icirc;&raquo;&Ecirc;&yacute;&Aring;&ETH;&para;&Iuml;
    {
        printf("Q&micro;&Auml;&Ecirc;&yacute;&Ouml;&micro;&Icirc;&ordf;1%d!\n\n",n);
        goto exit;
    }



/*&Ograve;ò×&Oacute;&sup2;&para;&raquo;&ntilde;&sup2;&iquest;·&Ouml;*/
   
    else if (n>=10)                                     //&Otilde;&yacute;&Egrave;·&Ecirc;&auml;&Egrave;&euml;&Aring;&ETH;&para;&Iuml;
     {
//&sup2;&para;&raquo;&ntilde;&Ograve;ò×&Oacute;
        for (;;i++)                           
        {
            if ( n%2==0 && n!=2 )
            {num2+=1;n/=2;
            }
            else if ( n%3==0 && n!=3 )
            {num3+=1;n/=3;
            }
            else if ( n%5==0 && n!=5 )
            {num5+=1;n/=5;
            }
            else if ( n%7==0 && n!=7 )
            {num7+=1;n/=7;
            }
            
            if (n==2)                                //&sup2;&para;&raquo;&ntilde;&Ouml;&Otilde;&Ouml;&micro;
            {num2+=1;break;
            }
            if (n==3)
            {num3+=1;break;
            }
            if (n==5)
            {num5+=1;break;
            }
            if (n==7)
            {num7+=1;break;
            }
            
            if ( n%2!=0 &&
                 n%3!=0 &&
                 n%5!=0 &&
                 n%7!=0 )                            //&Iacute;&Euml;&sup3;&ouml;&Aring;&ETH;&para;&Iuml;
            {printf("&Icirc;&THORN;&frac12;&acirc;!");goto exit;
            }
        }
    }
//    printf("2=%d  3=%d  5=%d  7=%d\n",num2,num3,num5,num7);  &Ntilde;é&Ouml;¤&Ograve;ò×&Oacute;&sup2;&para;&raquo;&ntilde;&Ecirc;&Ccedil;·&ntilde;&sup3;&Eacute;&Aacute;&cent;!


   
/*&Ograve;ò×&Oacute;&ETH;&acute;&Egrave;&euml;&sup2;&iquest;·&Ouml;*/

    for (i=0;i<30;i++) a[i]=1;                       //&Ecirc;&yacute;×é&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;

    for (i=0;i<(num+num2);i++) a[i]=2;               //&ETH;&acute;&Egrave;&euml;&Ograve;ò×&Oacute;2
    num+=num2;
    for (i=num;i<(num+num3);i++) a[i]=3;             //&ETH;&acute;&Egrave;&euml;&Ograve;ò×&Oacute;3
    num+=num3;
    for (i=num;i<(num+num5);i++) a[i]=5;             //&ETH;&acute;&Egrave;&euml;&Ograve;ò×&Oacute;5
    num+=num5;
    for (i=num;i<(num+num7);i++) a[i]=7;             //&ETH;&acute;&Egrave;&euml;&Ograve;ò×&Oacute;7


   
//    for (i=0;i<30;i++) printf("%2d",a[i]);           // &Ntilde;é&Ouml;¤&Ograve;ò×&Oacute;&Ecirc;&Ccedil;·&ntilde;&Otilde;&yacute;&Egrave;·&ETH;&acute;&Egrave;&euml;
//    printf("\n\n");


//************************&Ograve;&Ocirc;&Eacute;&Iuml;&acute;ú&Acirc;&euml;&iquest;é&Ocirc;&Euml;&ETH;&ETH;&micro;÷&Ecirc;&Ocirc;&Iacute;ê±&Iuml;!************************//
   


/*&Ograve;ò×&Oacute;&ordm;&Iuml;&sup2;&cent;&sup2;&iquest;·&Ouml;*/

//&Ograve;ò×&Oacute;&ordm;&Iuml;&sup2;&cent;&iquest;é&micro;÷&Ecirc;&Ocirc;&Ouml;&ETH;......
    for (k=0;k<30;k++)
    {
        if ((a[k]*a[k+1])<10)
        {
            a[k+1]=a[k+1]*a[k];
            a[k]=1;
            t++;
        }
        if ( (a[k]*a[k+1])>=10 && t>0 )
        {
            for (i=0;i<29;i++)
            {
                for (j=0;j<29-i;j++)
                {
                    if (a[j]>a[j+1])
                    {
                        bmp=a[j];
                        a[j]=a[j+1];
                        a[j+1]=bmp;
                    }
                    else
                        continue;
                }
            }
        }
    }

//    for (i=0;i<30;i++) printf("%2d",a[i]);   
//    printf("\n\n");


//&Aacute;&ETH;&frac34;&Ugrave;&Ograve;ò×&Oacute;&sup2;&cent;&Eacute;ú&sup3;&Eacute;&Ecirc;&yacute;&Ouml;&micro;Q
    printf("Q&micro;&Auml;&Ecirc;&yacute;&Ouml;&micro;&Icirc;&ordf;");
    for (i=0;i<30;i++)
    {
        if (a[i]==1) continue;
        printf("%d",a[i]);
        
    }
    printf("!\n\n");
   
}


exit:
    printf("\n");
   
}




 貌似论坛的代码不支持中文~     重新发一次~

to be or not to be
2010-10-25 13:42
bc121189971
Rank: 2
来 自:深圳
等 级:论坛游民
帖 子:29
专家分:36
注 册:2010-9-27
收藏
得分:0 
要上课了

==下午再发一次编码正常的...
程序代码:
#include<stdio.h>
void main()
{
    int n,bmp;
    int a[30],i,j,k,t=1;
    int num=0,num2=0,num3=0,num5=0,num7=0;


    for (;;i++)
    {
        num=0;num2=0;num3=0;num5=0;num7=0;           //因子清零
begin:
    scanf("%d",&n);
    if ( n>1000000000 || n<=0 )                      //错误输入判断
    {
        printf("ERROR!重新输入!\n");
        goto begin;
    }

    else if (n>0&&n<10)                              //一位数判断
    {
        printf("Q的数值为1%d!\n\n",n);
        goto exit;
    }


/*因子捕获部分*/
    else if (n>=10)                                 //正确输入判断
     {
//捕获因子
        for (;;i++)                           
        {
            if ( n%2==0 && n!=2 )
            {num2+=1;n/=2;
            }
            else if ( n%3==0 && n!=3 )
            {num3+=1;n/=3;
            }
            else if ( n%5==0 && n!=5 )
            {num5+=1;n/=5;
            }
            else if ( n%7==0 && n!=7 )
            {num7+=1;n/=7;
            }
           
            if (n==2)                                //捕获终值
            {num2+=1;break;
            }
            if (n==3)
            {num3+=1;break;
            }
            if (n==5)
            {num5+=1;break;
            }
            if (n==7)
            {num7+=1;break;
            }
           
            if ( n%2!=0 &&
                 n%3!=0 &&
                 n%5!=0 &&
                 n%7!=0 )                            //退出判断
            {printf("?T?a!");goto exit;
            }
        }
    }
//    printf("2=%d  3=%d  5=%d  7=%d\n",num2,num3,num5,num7);  //验证因子捕获是否成立!


   
/*因子写入部分*/

    for (i=0;i<30;i++) a[i]=1;                       //数组初始化

    for (i=0;i<(num+num2);i++) a[i]=2;               //写入因子2
    num+=num2;
    for (i=num;i<(num+num3);i++) a[i]=3;             //写入因子3
    num+=num3;
    for (i=num;i<(num+num5);i++) a[i]=5;             //写入因子5
    num+=num5;
    for (i=num;i<(num+num7);i++) a[i]=7;             //写入因子7


   
//    for (i=0;i<30;i++) printf("%2d",a[i]);         // 验证因子是否正确写入
//    printf("\n\n");



/*因子合并部分*/
    for (k=0;k<30;k++)
    {
        if ((a[k]*a[k+1])<10)
        {
            a[k+1]=a[k+1]*a[k];
            a[k]=1;
            t++;
        }
        if ( (a[k]*a[k+1])>=10 && t>0 )
        {
            for (i=0;i<29;i++)
            {
                for (j=0;j<29-i;j++)
                {
                    if (a[j]>a[j+1])
                    {
                        bmp=a[j];
                        a[j]=a[j+1];
                        a[j+1]=bmp;
                    }
                    else
                        continue;
                }
            }
        }
    }

//    for (i=0;i<30;i++) printf("%2d",a[i]);   
//    printf("\n\n");


//列举因子并生成数值Q
    printf("Q的数值为");
    for (i=0;i<30;i++)
    {
        if (a[i]==1) continue;
        printf("%d",a[i]);
       
    }
    printf("!\n\n");
   
}


exit:
    printf("\n");
   
}







[ 本帖最后由 bc121189971 于 2010-10-25 16:09 编辑 ]

to be or not to be
2010-10-25 13:44
a343637412
Rank: 7Rank: 7Rank: 7
来 自:そ ら
等 级:黑侠
帖 子:357
专家分:620
注 册:2010-9-26
收藏
得分:1 
新手路过.....好长好长...
2010-10-25 16:12
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:1 
程序代码:
#include<stdio.h>
void main()
{
    int n,bmp;
    int a[30],i=0,j,k,t=1;                // i 没给初值
    int num=0,num2=0,num3=0,num5=0,num7=0;


    for (;;i++)
    {
        num=0;num2=0;num3=0;num5=0;num7=0;           //因子清零
begin:
    scanf("%d",&n);
    if ( n>1000000000 || n<=0 )                      //错误输入判断
    {
        printf("ERROR!重新输入!\n");
        goto begin;
    }

    else if (n>0&&n<10)                              //一位数判断
    {
        printf("Q的数值为1%d!\n\n",n);
        goto exit;
    }


/*因子捕获部分*/
    else if (n>=10)                                 //正确输入判断
     {
//捕获因子
        for (;;i++)                          
        {
            if ( n%2==0 && n!=2 )
            {num2+=1;n/=2;
            }
            else if ( n%3==0 && n!=3 )
            {num3+=1;n/=3;
            }
            else if ( n%5==0 && n!=5 )
            {num5+=1;n/=5;
            }
            else if ( n%7==0 && n!=7 )
            {num7+=1;n/=7;
            }
          
            if (n==2)                                //捕获终值
            {num2+=1;break;
            }
            if (n==3)
            {num3+=1;break;
            }
            if (n==5)
            {num5+=1;break;
            }
            if (n==7)
            {num7+=1;break;
            }
          
            if ( n%2!=0 &&
                 n%3!=0 &&
                 n%5!=0 &&
                 n%7!=0 )                            //退出判断
            {printf("?T?a!");goto exit;
            }
        }
    }
//    printf("2=%d  3=%d  5=%d  7=%d\n",num2,num3,num5,num7);  //验证因子捕获是否成立!


  
/*因子写入部分*/

    for (i=0;i<30;i++) a[i]=1;                       //数组初始化

    for (i=0;i<(num+num2);i++) a[i]=2;               //写入因子2
    num+=num2;
    for (i=num;i<(num+num3);i++) a[i]=3;             //写入因子3
    num+=num3;
    for (i=num;i<(num+num5);i++) a[i]=5;             //写入因子5
    num+=num5;
    for (i=num;i<(num+num7);i++) a[i]=7;             //写入因子7


  
//    for (i=0;i<30;i++) printf("%2d",a[i]);         // 验证因子是否正确写入
//    printf("\n\n");



/*因子合并部分*/
    for (k=0;k<30;k++)
    {
        if ((a[k]*a[k+1])<10)
        {
            a[k+1]=a[k+1]*a[k];
            a[k]=1;
            t++;
        }
        if ( (a[k]*a[k+1])>=10 && t>0 )
        {
            for (i=0;i<29;i++)
            {
                for (j=0;j<29-i;j++)
                {
                    if (a[j]>a[j+1])
                    {
                        bmp=a[j];
                        a[j]=a[j+1];
                        a[j+1]=bmp;
                    }
                    else
                        continue;
                }
            }
        }
    }

//    for (i=0;i<30;i++) printf("%2d",a[i]);  
//    printf("\n\n");


//列举因子并生成数值Q
    printf("Q的数值为");
    for (i=0;i<30;i++)
    {
        if (a[i]==1) continue;
        printf("%d",a[i]);
      
    }
    printf("!\n\n");
  
}


exit:
    printf("\n");
  
}







i 没给初值                       初始化后就ok了

[ 本帖最后由 m21wo 于 2010-10-25 17:11 编辑 ]

If You Want Something, Go Get It, Period.
2010-10-25 16:25
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:1 
呵呵,看到你在群里发过的,不过个人感觉最简单的方法是穷举法了
2010-10-25 17:08
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:0 
程序代码:
#include<stdio.h>
main()
{
    int i,k=0,a[81];
    _int64 m=0,n;
    scanf("%I64d",&n);
    if(n<10)
    {
        printf("%I64d\n",n);
        return 0;
    }
    while(n!=1)
    {
        for(i=9;i>1;i--)
           if(n%i==0)
           {
              a[k++]=i;
              break;
           }
        if(i==1)
        {
           printf("error\n");
           return 0;
        }
        n=n/i;
    }
    for(i=k-1;i>=0;i--)
       m=m*10+a[i];
    printf("%I64d\n",m);
}  

这个是最完美的了

[ 本帖最后由 yuanfeng1129 于 2010-10-30 08:50 编辑 ]
2010-10-25 17:51
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:0 
呵呵,上面是我发的,不是穷举法,接下来用穷举帮你啊,呵呵
2010-10-25 17:52
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:0 
[原创]C语言排序算法大全,大家进来支持一下

 大家好,有人问过我关于排序的问题,所以本人兴起,决定将几种常见的排序方法列举出来,供大家来学习,同时,本人也可以从中获得一些进步,现在我将几种源代码一一列举出来,并附上详细解析,大家如有什么疑问请跟帖说明!

一.冒泡法:

此法是最常用的一种方法,其思维比较简单,有两种冒泡法,一种是大数逐渐上浮到最后面,还有一种就是小的数依次浮到最前面,关于冒泡法上海大学教材上有详细说明,本人不多做解释,主要对代码进行一些解析。

法一:

#define N 10//宏定义命令,N代表10

#include<stdio.h>

main()

{

    int a[N],i,j,t;

    for(i=0;i<N;i++)

        scanf("%d",&a[i]);

    for(i=0;i<N-1;i++)//外循环控制次数,表示要执行N-1次冒泡

        for(j=0;j<N-1-i;j++)//从前往后,每比较一次后大的数

            if(a[j]>a[j+1])//就到了前后面

            {t=a[j];a[j]=a[j+1];a[j+1]=t;}

    for(i=0;i<N;i++)

        printf("%d ",a[i]);

    printf("\n");

}


法二:

#define N 10

#include<stdio.h>

main()

{

    int a[N],i,j,t;

    for(i=0;i<N;i++)

        scanf("%d",&a[i]);

    for(i=0;i<N-1;i++)//外循环控制次数

        for(j=N-1;j>i;j--)//从后向前,每比较一次小的数就到了

            if(a[j]<a[j-1])//前面

            {t=a[j];a[j]=a[j-1];a[j-1]=t;}

    for(i=0;i<N;i++)

        printf("%d ",a[i]);

    printf("\n");

}


二.选择法:

选择法的思路也比较简单,学校书上没说清楚,现在我说清楚一下,就是先找出最小数,然后将其与第一个数调换,再在第二个人数开始的数列中找出最小数,与第二个数调换,依次类推,本人就说这么多了,大家请自己体会。

法一:

/*此法代码比较简单,容易理解,推荐大家用这种方法*/

#define N 10

#include<stdio.h>

main()

{

    int a[N],i,j,t;

    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(a[i]>a[j])//每当遇到a[i]比a[j]大时,都进行交换

           {t=a[i];a[i]=a[j];a[j]=t;}   

    for(i=0;i<N;i++)

        printf("%d ",a[i]);

    printf("\n");

}


法二:

#define N 10

#include<stdio.h>

main()

{

    int a[N],i,j,min,t;

 

    scanf("%d",&a[i]);

    for(i=0;i<N-1;i++)

    {

        for(min=i,j=i+1;j<N;j++)//找出最小值所在下标

            if(a[min]>a[j]) min=j;

        if(min!=i)//这里是程序优化部分,也可不要

        {t=a[min];a[min]=a[i];a[i]=t;}

    }

    for(i=0;i<N;i++)

        printf("%d ",a[i]);

    printf("\n");

}


法三(构造函数):

(一学弟曾这样做过,叫我帮他排错,我帮他找出了错误,同时进一步优化程序,使程序的可读性尽量好,算法的时间复杂度尽量低,不过不推荐大家这样做)

#define N 10

#include<stdio.h>

int min(int a[],int i)

{

    int j,min;

    for(min=i,j=i+1;j<N;j++)

        if(a[min]>a[j]) min=j;

    return min;

}

main()

{

    int a[N],i,t,min1;

    for(i=0;i<N;i++)

        scanf("%d",&a[i]);

    for(i=0;i<N-1;i++)

    {

        min1=min(a,i);

        if(min1!=i)

        {t=a[min1];a[min1]=a[i];a[i]=t;}

    }

    for(i=0;i<N;i++)

        printf("%d ",a[i]);

    printf("\n");

}


三.插入法:

插入法是这三种方法中最难得,一般用的较少,不推荐大家这样做,其基本思路是这样的,在之前已经排序好的数列中插入一个数,使其仍然有续,逐个进行下去,就可完成排序。

法一:

#define N 10

#include<stdio.h>

main()

{

    int a[N],i,j,t;

    for(i=0;i<N;i++)

        scanf("%d",&a[i]);

    for(i=1;i<N;i++)

    {   /*t保存a[i]的值*/

        for(t=a[i],j=i-1;j>=0;j--)//从后向前依次对比a[i]和

            if(t<a[j]) a[j+1]=a[j];//a[j]值,若a[i]<a[j],

            else break; //则后移一位,若不成立,即找到了

        a[j+1]=t;//插入位置,这一句就是插入过程

    }

    for(i=0;i<N;i++)

        printf("%d ",a[i]);

    printf("\n");

}


法二:

这个是本人自己的方法,和教材上的有点不一样,教材上是在寻找插入位置的过程中逐个后移数组,我这个是先找到插入点,然后整体后移数组。

#define N 10

#include<stdio.h>

main()

{

    int a[N],i,j,k,t;

    for(i=0;i<N;i++)

        scanf("%d",&a[i]);

    for(i=1;i<N;i++)

        for(j=0;j<N-1;j++)

            if(a[i]<a[j])//找到了插入位置

            {

                for(t=a[i],k=i;k>j;k--)//此循环为数组

                    a[k]=a[k-1];//后移过程,不做详细分析

                a[j]=t;//将a[i]插入指定位置

                break;

            }

    for(i=0;i<N;i++)

        printf("%d ",a[i]);

    printf("\n");

}

/*本人语言表达水平不够,也只能够做这些分析,大家应该记得一道题——对于一个有序数列,插入一个数后,使其仍然有续。会做这道题了插入法也就不难理解了*/

2010-10-25 17:54
快速回复:输入一个正整数N,要求满足题目条件
数据加载中...
 
   



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

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