真正的对手只有自己——问题:比赛对手是谁

分享练习题,一起来看看~

题目:
两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
错误代码一及分析:

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	int a[1], b[1], c[1];
	char n;

	for (n = 'x'; n <= 'z'; n++){
		if ((n != 'x') && (n != 'z'))
			c[0] = n;
		if ((n != 'x') && (n != c[0]))
			a[0] = n;
		if ((n != c[0]) && (n != a[0]))
			b[0] = n;
	}
	pritnf("a--- %d, b--- %d, c--- %d\n",a[0], b[0], c[0]);	
	
	return 0;
}

从上述代码来看,首先在人的思维方式上说是可以的,但是其实在计算机的运行方式上是存在漏洞的,计算机不能够选择跳跃式的计算,计算机能够运行的程序是一步一步进行的。当在一个循环内部的时候,每一次运行计算机都是按照既定顺序进行的,并且确定的
比如,在这个错误代码循环中,当 n = x 时,首先运行第一个 if 语句中的 n 不能等于 x 和 z 那么此时不满足,跳过执行下一个循环,同样会发现,在接下来的第二个 if 当中遇到相同问题,还是不满足,并且在此时if中出现 c[0] 时不确定的,当然在第三个 if 语句中计算机其实是不能够执行的,因为两个比较的对象都是未定的。并且,无论怎样循环都是相同的问题,也就是代码错误,程序设计思路有问题。
这里提出一个问题:能否通过调换if 语句的顺序解决上述问题呢?
如果只是简单的调换 if 顺序也还是不能解决。当然,如果添加其他的算法代码应该是存在可能的。

错误代码二及分析:

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	char i, j, k;
	
	for (i = 'x'; i <= 'z';i++){
		for(j = 'x'; j <= 'z'; j++){
			for (k = 'x'; k <= 'z'; k++){
				if ( i != j && j != k && k != i){
					if (i != 'x' && k != 'x' && k != 'z'){					
						printf("i----: %c ; j----: %c; k----: %c",i, j, k);	
				}
			}
		} 
	}
	return 0;
}

这类错误代码其实和先前的例子是一样的,还是不能实现。
这个东西在这里了,自己悟吧!

正确代码:

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	char i, j, k;
	
	for (i = 'x'; i <= 'z';i++){
		for(j = 'x'; j <= 'z'; j++){
			if(i != j){					//这里就是需要考虑到调整的!
				for (k = 'x'; k <= 'z'; k++){
				if (j != k && k != i){
					if (i != 'x' && k != 'x' && k != 'z'){					
						printf("i----: %c ; j----: %c; k----: %c",i, j, k);
					}
				}
				}
		}
		} 
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44566432/article/details/88035304