Compare T-Shirt Sizes

发布时间 2023-05-19 21:01:25作者: harper886


我在CF上面ac的第一个题简单写一下

#include <stdio.h>
#include <string.h>


typedef struct {
	char a[99];
	char b[99];
	int flag;//用来储存标志

} shirt; //定义一个结构体用来储存数据,这样可以让思路更清晰

/*
1.该函数用来判断SLM号码的大小
2.需要两个字符
3.该函数有返回值如果b号码大于a号码,则返回0;如果b号码小于a号码则返回-1;
*/
int slm(char a, char b) {
	if ((a == 'S' && b == 'M') || (a == 'S' && b == 'L') || (a == 'M' && b == 'L')) {
		return 0;
	} else {

		return -1;
	}

}


int main() {
	/*
	6
	XXXS XS
	XXXL XL
	XL M
	XXL XXL
	XXXXXS M
	L M
	*/
	int len1;
	int len2;
	int n;
	scanf("%d", &n);
	shirt arr[n];//定义一个结构体数组
	/*
	对结构体数组进行输入,并且判断
	*/
	for (int i = 0; i < n; i++) {
		scanf("%s %s", arr[i].a, arr[i].b);
		len1 = strlen(arr[i].a);
		len2 = strlen(arr[i].b); //就是用strlen函数获取字符串长度
		if (arr[i].a[len1 - 1] == arr[i].b[len2 - 1]) { //比较最后一个字符串,相等的话执行下面的语句
			if (strcmp(arr[i].a, arr[i].b) < 0) { //用strcmp函数比较两字符数组的大小
				//1代表小于,2代表相等,3代表大于
				if (arr[i].a[len1 - 1] == 'S') {
					arr[i].flag = 3;
				} else {
					arr[i].flag = 1;
				}
				//这里反正就是M号和L号前面的X越多表示的含义正好相反
			} else if (strcmp(arr[i].a, arr[i].b) == 0) {
				arr[i].flag = 2;
			} else {
				if (arr[i].a[len1 - 1] == 'S') {
					arr[i].flag = 1;
				} else {
					arr[i].flag = 3;
				}//这里和上面的M号和L号表示的含义差不多
//				arr[i].flag=3;
			}


		} else {//比较最后一个字符串,不相等的话执行下面的语句
			if (slm(arr[i].a[len1 - 1], arr[i].b[len2 - 1]) == 0) {//调用前面的函数
				arr[i].flag = 1;
			} else {
				arr[i].flag = 3;

			}
		}

	}




	for (int i = 0; i < n; i++) {//这里遍历输出就行,没啥好说的
		if (i != 0) {
			printf("\n");
		}
		if (arr[i].flag == 2) {
			printf("=");
		} else if (arr[i].flag == 1) {
			printf("<");
		} else if (arr[i].flag == 3) {
			printf(">");
		}

	}







	return 0;
}