c语言:统计十字路口车辆信息(计数)

000110111100000110111100000001110# 这是一个十字路口检测车辆经过的一行数据,0代表未检测到,1代表一辆车,#代表结束,现在需要知道:总车辆数,最长间隔(不算头尾),总间隔数,总观测时间(以秒为单位,一个数字代表1秒),输入只有一行。

输入样例:

000110111100000110111100000001110#

输出样例:

This data has 33 seconds. 15 cars through. 4 time intervals. The longest interval is 7 seconds.

分析:

由于输入数据可以很长很长,也可以做到实时处理,所以每次读入一个字符就可以。

总时间就是统计字符串长度(不算井号)。

总车数就是统计“1”的个数 

统计间隔数时,注意头尾不算间隔——

对于前导0,可以增加一个标记,判断遇没遇到过1,如果没遇到过1,前边读入多少0都不做处理。对于结尾0,可以把统计流程设计为遇到1时再处理上一个间隔,这样结尾0就不会被统计。

每结束一个间隔(就是遇到新的1了),就更新最长间隔。

结束。

# include 

int main(void)
{
	char now_data;
	int now_interval = 0;
	int total_car = 0, total_interval = 0, total_time = 0, max_interval = 0;
	int visited_car = 0; //为了忽略前导0
	while (scanf("%c", &now_data))
	{
		if (now_data == '#') break; // 循环出口

		total_time++;
		if (now_data == '0')
		{
			now_interval++;
		}
		else
		{
			total_car++;
			if (visited_car == 1) //间隔数是有效的
			{
				if (now_interval > max_interval) max_interval = now_interval;
				if (now_interval != 0) total_interval++;
			}
			visited_car = 1;
			now_interval = 0;
		}
	}
	printf("This data has %d seconds. %d cars through. %d time intervals. The longest interval is %d seconds.\n", total_time, total_car, total_interval, max_interval);
	return 0;
}

你可能感兴趣的:(C/C++/C#基础,c语言)