网上看到的一道题,给出解法已知一个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}
写出算法或程序。
经过考虑给出以下算法:
myFun(){
int USER[30] = {0,2,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};
bool numChan = true; //是否有不为零的数相连
bool fir = true; //是否第一次打印
for(int i=0; i<30; i++){
if(USER != 0){
if(fir){
cout<<USER;
fir = false;
}
else
cout<<","<<USER;
while((USER[i+1] != 0) && (i < 29)){
i++;
numChan = false;
}
if(!numChan)
cout<<"-"<<USER;
}
numChan = true;
}
}