返回列表 发帖

出道编程题,有兴趣的做一下

已知一个int型数组USER[30],其中每一个元素或为0或是其下标数加1。要求以字符串形式打印其中不为零的元素。
规则:1)不连续元素以逗号分割如:1,4,6,27,30
         2)连续元素用连字符形式,并用逗号分割每个区段,如:1-4,7,19-30
示例数组:USER[30] = {0,0,3,0,5,0,7,8,9,10,11,12,0,0,0,0,0,0,0,0,0,0,0,24,25,0,0,0,29,0}
写出算法或程序。


这是一个function中的一小部分功能实现

呵呵
这是我工作以后解决的第一个问题的一小部分抽象出来的一个问题

TOP

回去想想
[color=red][url=http://liuhongdan.blogchina.com/]每个人都有一种心情 每颗心都是一片世界[/url] [/color]

TOP

void function()
{
        int nCon=0;//是否连续,>=2连续.<2不连续
        bool bfirst=true;//是否第一次打印。
        for(int i=0;i<30;i++){
                if(0==USER){
                        if(nCon!=0){//存在非0元素                               
                                if(!bfirst){
                                        printf(",");//非第一次打印,打印逗号,否则不打印.
                                }
                                bfirst=false;
                        }
                        if(nCon>=2){
                                printf("%d",i+1-nCon);//min
                                printf("-%d",i);//连续,当前元素为0,打印前一元素(max)
                        }
                        if(nCon==1){
                                printf("%d",i);//不连续,当前元素为0,打印前一元素。
                        }
                        nCon=0;
                }else{
                        nCon++;
                }
        }
        printf("\n");
}

[ Last edited by Webmaster on 2005-2-24 at 11:08 ]
[color=red] 我到此N+1游. [/color]

TOP

还好

看了一下, 如果最后一个元素不为0 ,你怎么处理, 考虑一下边界条件

还有 应该是(0==USER[i]) 吧

TOP

呵呵,真没考虑最后一个不为0.
改一下吧.
if(0==USER[i]){
//....
}else{
    nCon++;
    if(29==i){//最后不为0,i为当前max位,值为i+1
        printf(",");
        if(nCon>1){
                        printf("%d",i+1+1-nCon);//min
                printf("-%d",i+1);//max
    }else{
                printf("%d",i+1);
    }
}
[color=red] 我到此N+1游. [/color]

TOP

我怎么感觉我写的这么麻烦呢?
要是能这样就好了:
lsakdjflsa d
asdfjkl;asdj
ok
bye
呵呵。
[color=red] 我到此N+1游. [/color]

TOP

合起来.
  1. void function()
  2. {
  3.         int nCon=0;//是否连续,>=2连续.<2不连续
  4.         bool bfirst=true;//是否第一次打印。
  5.         for(int i=0;i<30;i++){
  6.                 if(0==USER[i]){
  7.                         if(nCon!=0){//存在非0元素                                
  8.                                 if(!bfirst){
  9.                                         printf(",");//非第一次打印,打印逗号,否则不打印.
  10.                                 }
  11.                                 bfirst=false;
  12.                         }
  13.                         if(nCon>=2){
  14.                                 printf("%d",i+1-nCon);//min
  15.                                 printf("-%d",i);//连续,当前元素为0,打印前一元素(max)
  16.                         }
  17.                         if(nCon==1){
  18.                                 printf("%d",i);//不连续,当前元素为0,打印前一元素。
  19.                         }
  20.                         nCon=0;
  21.                 }else{
  22.                         nCon++;
  23.                         if(29==i){//最后不为0,i为当前max位,值为i+1
  24.                                 printf(",");
  25.                                 if(nCon>1){//连续
  26.                                         printf("%d",i+1+1-nCon);//min
  27.                                         printf("-%d",i+1);//max
  28.                                 }else{
  29.                                         printf("%d",i+1);
  30.                                 }
  31.                                 
  32.                         }
  33.                 }
  34.         }
  35.         printf("\n");
  36. }
复制代码
欢迎大家批评指正.

[ Last edited by Webmaster on 2005-2-24 at 14:21 ]
[color=red] 我到此N+1游. [/color]

TOP

没反映了?我怎么感觉我在帮人家做作业啊?
[color=red] 我到此N+1游. [/color]

TOP

怎么没考虑用指针做呢
这可是c语言的精髓的一部分呀

TOP

返回列表