标题:
出道编程题,有兴趣的做一下
[打印本页]
作者:
zeus
时间:
2005-2-2 10:03
标题:
出道编程题,有兴趣的做一下
已知一个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中的一小部分功能实现
作者:
zeus
时间:
2005-2-3 10:50
呵呵
这是我工作以后解决的第一个问题的一小部分抽象出来的一个问题
作者:
怀恋在子夜
时间:
2005-2-22 18:42
回去想想
作者:
Webmaster
时间:
2005-2-24 11:04
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
]
作者:
zeus
时间:
2005-2-24 13:00
还好
看了一下, 如果最后一个元素不为0 ,你怎么处理, 考虑一下边界条件
还有 应该是(0==USER[i]) 吧
作者:
Webmaster
时间:
2005-2-24 14:06
呵呵,真没考虑最后一个不为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);
}
}
作者:
Webmaster
时间:
2005-2-24 14:08
我怎么感觉我写的这么麻烦呢?
要是能这样就好了:
lsakdjflsa d
asdfjkl;asdj
ok
bye
呵呵。
作者:
Webmaster
时间:
2005-2-24 14:15
合起来.
void function()
{
int nCon=0;//是否连续,>=2连续.<2不连续
bool bfirst=true;//是否第一次打印。
for(int i=0;i<30;i++){
if(0==USER[i]){
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++;
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);
}
}
}
}
printf("\n");
}
复制代码
欢迎大家批评指正.
[
Last edited by Webmaster on 2005-2-24 at 14:21
]
作者:
Webmaster
时间:
2005-2-24 17:40
没反映了?我怎么感觉我在帮人家做作业啊?
作者:
zeus
时间:
2005-2-24 21:01
怎么没考虑用指针做呢
这可是c语言的精髓的一部分呀
作者:
Webmaster
时间:
2005-2-25 08:37
你用指针做吧.
因为容易出现内存泄露和访问非法地址的原因,我习惯了能不用指针就不用指针。
指针是个很好的方式,但用不好也会造成很大的麻烦。
作者:
zeus
时间:
2005-2-25 09:08
你只是听说把
可能还没体验过什么叫内存泄露
几千甚至几万行的程序可能还感觉不到内存泄露
这样的问题往往在大的project中才会出现
况且 现在已经有检测程序代码是否存在内存泄露的工具
呵呵
不必担心
作者:
Webmaster
时间:
2005-2-25 09:24
呵呵.你知我干嘛的?
作者:
zeus
时间:
2005-2-25 09:38
斑竹阿
呵呵
作者:
Webmaster
时间:
2005-2-25 11:22
哈哈
你怎么不用指针做呢?我看看。
作者:
casta1985
时间:
2005-2-26 10:35
哇,看两个高人讨论那么深奥的问题,好崇拜啊,我很努力的学,C语言仍然只是学到皮毛而已,惭愧啊
作者:
Webmaster
时间:
2005-2-28 13:36
楼上,你挖苦我们呢?不就是一个小题目大家玩玩么。
欢迎光临 工程家园 (http://heubbs.com./)
Powered by Discuz! 7.2