user-0 提问: C语言简单计数求助

回复:
user: user-0
content: 引用 1 楼 Seth423 的回复： #include <stdio.h>  int main()	//缩进太乱 { 	int n;				//变量声明要放到开头 	int i, p, j = 0, t = 0, k = 0; 	int b[10];		//用不了1000的空间,另外a数组没什么用，接收的值用t就可以 	 	scanf("%d", &n);		 	for(i = 0; i < n; i++) 	{ 		for (j = 0; j < 10; j++)//初始化要用循环,否则只是给b[0]赋了初值 			b[j] = 0; 			 		scanf("%d", &p); 		for(j = 0; j < p; j++) 		{ 			scanf("%d", &t);	//此外数组就是指针，不需要‘&’ 			if (t < 10 && t >= 0)	//判断完大小后，数量数组直接加一就好 				++b[t++]; 			 		} 		 		for(k = 0; k < 10; k++)		//输出功能是在输入结束后进行的，所以至少要跳出输入的循环 		{ 			if(b[k] != 0) 				printf("%d %d\n", k, b[k]); 		} 	} 	return 0; } 好的好的我懂啦！太感谢您了 原来这问题还不少呢，还要多多学习

user: user-1
content: 这个版本更符合题意  #include <stdio.h>  int main() { 	int n; 	int i, j, p, t; 	int b[100]; 	 	scanf("%d", &n);		 	for(i = 0; i < n; i++) 	{ 		for (j = i*10; j < i*10+10; j++) 			b[j] = 0; 			 		scanf("%d", &p); 		for(j = 0; j < p; j++) 		{ 			scanf("%d", &t); 			if (t < 10 && t >= 0) 				++b[i * 10 + t++]; 		} 	} 	 	for(i = 0; i < n*10; i++) 		{ 			if (b[i] != 0) 				printf("%d %d\n", i%10, b[i]); 			if (i % 10 == 0) 				printf("------------\n"); 		} 		 	return 0; }

user: user-1
content: #include <stdio.h>  int main()	//缩进太乱 { 	int n;				//变量声明要放到开头 	int i, p, j = 0, t = 0, k = 0; 	int b[10];		//用不了1000的空间,另外a数组没什么用，接收的值用t就可以 	 	scanf("%d", &n);		 	for(i = 0; i < n; i++) 	{ 		for (j = 0; j < 10; j++)//初始化要用循环,否则只是给b[0]赋了初值 			b[j] = 0; 			 		scanf("%d", &p); 		for(j = 0; j < p; j++) 		{ 			scanf("%d", &t);	//此外数组就是指针，不需要‘&’ 			if (t < 10 && t >= 0)	//判断完大小后，数量数组直接加一就好 				++b[t++]; 			 		} 		 		for(k = 0; k < 10; k++)		//输出功能是在输入结束后进行的，所以至少要跳出输入的循环 		{ 			if(b[k] != 0) 				printf("%d %d\n", k, b[k]); 		} 	} 	return 0; }

user: user-1
content: 引用 5 楼 自信男孩 的回复:是否考虑n的值需要做一下限制，否者b数组有越界的风险。代码需要更严谨一些～  感謝提醒~ 麻煩您看一下這個會不會好一點：  #include <stdio.h> #define MAXLEN 100   int main() {     int n;     int i, j, p, t, flag;     int b[MAXLEN];      	i = 0; 	while (flag == 0 && i <= 10) 	{ 		scanf("%d", &n) 		if (n > MAXLEN / 10 || n <= 0) 		{ 			printf("error: n is invalid, try again...\n"); 			++i; 		} 		else 			break; 	} 	if (i == 10) 	{ 		printf("error: maximum input-time reaches\n"); 		return 1; 	} 		     for(i = 0; i < n; i++)     {         for (j = i*10; j < i*10+10; j++)             b[j] = 0;                       scanf("%d", &p);         for(j = 0; j < p; j++)         {             scanf("%d", &t);             if (t < 10 && t >= 0)                 ++b[i * 10 + t++];         }     }           for(i = 0; i < n*10; i++)         {             if (b[i] != 0)                 printf("%d %d\n", i%10, b[i]);             if (i % 10 == 0)                 printf("------------\n");         }               return 0; }

user: user-2
content: 引用 2 楼 Seth423 的回复:这个版本更符合题意  #include <stdio.h>  int main() { 	int n; 	int i, j, p, t; 	int b[100]; 	 	scanf("%d", &n);		 	for(i = 0; i < n; i++) 	{ 		for (j = i*10; j < i*10+10; j++) 			b[j] = 0; 			 		scanf("%d", &p); 		for(j = 0; j < p; j++) 		{ 			scanf("%d", &t); 			if (t < 10 && t >= 0) 				++b[i * 10 + t++]; 		} 	} 	 	for(i = 0; i < n*10; i++) 		{ 			if (b[i] != 0) 				printf("%d %d\n", i%10, b[i]); 			if (i % 10 == 0) 				printf("------------\n"); 		} 		 	return 0; }   是否考虑n的值需要做一下限制，否者b数组有越界的风险。代码需要更严谨一些～

user: user-1
content: 希望尽快采纳哦