2014-09-30 28 views
-1
Example input: 20 10 5 20 2 20 20 20 2 2 0 

Output: 
(20*5) 
(10*1) 
(5*1) 
(2*3) 

我刚开始编程这个学期,需要项目帮助。如果我的问题不清楚,我很抱歉。使用C编程的连续整数

所以基本上我必须输入正整数直到输入“0”才会结束程序。我不允许使用数组(不管这意味着什么)。

#include <stdio.h> 


int main() 
{ 
int number, count=0 

while(1) 
{ 
    scanf("%d",&number); 
    if (number!=0) 
    { 
     count++; continue; 
    } 
    else 
    { 
     printf("%d*%d",number,count); 
     break; 
    } 
    return 0; 
} 

如何存放这些多个号码,这样我就不会在每次有输入的时间重叠对上号,并通过1递增重复的号码?我不能要求我的教授寻求帮助;他只是告诉我要谷歌它。

“A一定的工程装置由连续编号(整数)。 的输入控制。如果有相同数量的游程,所述装置可以优化其性能。因此,我们 想安排的数据,以便以写出一个C程序, 读取一个数字序列并打印出每个数字格式的行(n * m),其中 m是重复n次的数字。只有一个数字, 输入数字终止于一个零,这会暂停设备。“

+0

为什么你不允许使用数组有问题?你想要统计频率,这可以通过数组来有效完成。对于一个想法,你可以检查[这篇文章](http://stackoverflow.com/questions/11053607/count-how-many-times-an-element-occurs-in-an-array-java)。 – 2014-09-30 04:46:30

+0

如果他特别说你不能使用数组,你可以使用链表,但我认为这是违背任务的精神。 – IllusiveBrian 2014-09-30 04:46:36

+0

对不起,它应该是数字 – 2014-09-30 04:46:36

回答

3

这个任务似乎是基于运行长度编码(RLE)的半熟知识。无论如何,这是一个伪代码,它可以完成它所要求的功能。

in = read next number from input 
current_num = in // let the 1st number in list be current_num 
count = 1 

loop 
    in = read next number from input 
    if (in == 0) break // we are done, get out of loop 

    else if (in == current_num) count += 1 

    else  // run has ended, print it and start new run 
     print current_num * count 
     current = in 
     count = 1 

end loop 

print current_num * count // we exited the loop before printing the last run 
           // so do it outside the loop 

可以在代码中实现,然后“优化”,它以除去重复的代码,并利用角情况下护理(如“空”输入,单号码输入等)

编辑为了清楚起见,分配要求数字“运行”,但示例输出显示数字的“计数”。这两个是不是一样。

+0

这并不是上面的输出! – chouaib 2014-09-30 05:32:37

+0

虽然这是我认为代码可能要求的,但它不适合分配,因为示例输出似乎在打印之前已经读取并组织了整个运行,而不是仅打印连续的重复。尽管如此,这比实际的任务更有意义。 – IllusiveBrian 2014-09-30 05:32:41

+0

@chouaib我对这个问题发表了同样的评论。该任务要求“运行”数字,但所谓的样本输出显示了数字的“计数”。问题中给出的示例输出是错误的。 – 2014-09-30 05:35:29