想知道这个还有哪里不行
查看原帖
想知道这个还有哪里不行
1206067
0x78x0楼主2023/11/16 18:15
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996);

int main() {
	//m为篮板
	//n为篮球个数
	//1<=m<=n<=2000
	//input n篮球   m篮板
	//***恰有40%的数据满足n≤100
	int* sz;
	int* sz_m;

	int i;
	int ii;

	int n, m;
	int wj_i = 0;
	int js = 0;//如果n=m=0则结束
	int S[10] = { 0 };
	while (1) {
		while(1){
			//printf("请输入第%d行篮球 篮板:",wj_i+1);
			scanf("%d %d", &n, &m);
			if (n == 0 && m == 0) {
				js = 1;
				break;
			}
			if (m >= 1 && n >= m && n <= 2000)	break;
			else printf("不符号输入要求1<=m<=n<=2000\n请重新输入:\n\r");
		}
		if (js == 1)	break;
		sz = (int*)malloc(n * (sizeof(int)));
		sz_m = (int*)malloc(m * (sizeof(int)));
		for ( i = 0; i < n; i++) {
			scanf("%d", &sz[i]);
			if (i < m)	sz_m[i] = 1;
		}
		
		//从小到大排序
		for ( i = 0; i < n; i++) {
			for ( ii = 1; ii < n; ii++) {
				if (sz[ii] <= sz[ii - 1]) {
					int min = sz[ii - 1];
					sz[ii - 1] = sz[ii];
					sz[ii] = min;
				}
			}
		}
		int O = 0;	//统计0的个数
		int F = 0;	//统计负数
		for ( i = 0; i < n; i++) {
			if (sz[i] > 0);// sz_m[0] = sz_m[0] * sz[i];
			else if (sz[i] == 0)	O++;
			else if (sz[i] < 0)	F++;
		}


		if (m == 1) {
			for ( i = 0; i < n; i++) {
				sz_m[0] = sz_m[0] * sz[i];
			}
		}
		else if (F % 2 == 0) {
			for ( i = 0; i < n; i++) {
				if (sz[i] != 0)	sz_m[0] = sz_m[0] * sz[i];
				else sz_m[1] = sz_m[1] * sz[i];
			}
		}
		else if (F % 2 == 1) {
			for ( i = 0; i < n; i++) {
				if (sz[i] != 0 && i != 0+F)	sz_m[0] = sz_m[0] * sz[i];
				else sz_m[1] = sz_m[1] * sz[i];
			}
		}

		for ( i = 0; i < m; i++) {
			S[wj_i] = S[wj_i] + sz_m[i];
		}


		wj_i++;
		if (wj_i >= 10) break;
		free(sz);
		free(sz_m);
	}
	for ( i = 0; i < wj_i; i++) {
		printf("%d\n", S[i]);
	}
	//printf("%d", wj_i);
	return 0;
}
2023/11/16 18:15
加载中...