编程成长日记——有意思的编程题(一)

//日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。
//A说:不是我。
//B说:是C。
//C说:是D。
//D说:C在胡说
//已知3个人说了真话,1个人说的是假话。
//现在请根据这些信息,写一个程序来确定到底谁是凶手。
#include<stdio.h>
int main()
{
	int i=0;
	int killer=0;
	for(i=0;i<4;i++)
	{
		killer=65+i;
		if((killer!=‘A‘ )+(killer==‘C‘)+(killer==‘D‘)+(killer!=‘D‘)==3)
		{
			printf("Killer is %c\n",killer);
			break; 
		}

	}
	if((killer!=‘A‘ )+(killer==‘C‘)+(killer==‘D‘)+(killer!=‘D‘)!=3)
	{
	  printf("Killer not found!\n");
	}
	return 0;
}

其实刚开始拿到这个题目的时候是无从下手的,虽然自己可以做推算,但是用编程的方法写出来还是不是很会,但是仔细分析题目以后,发现用

if((killer!=‘A‘ )+(killer==‘C‘)+(killer==‘D‘)+(killer!=‘D‘)==3)

这个判断语句就可以解决问题了,三人之中有一人说了假话,同时也让我再次认识到+号的另一种用法。

时间: 2024-12-24 19:03:39

编程成长日记——有意思的编程题(一)的相关文章

编程成长日记——杨辉三角

#include<stdio.h>  //杨辉三角  int main() { int i=0,j=0,n=0,k=0;   int a[100][100]={1,0};   printf("请输入杨辉三角形的行数:");   scanf("%d",&n);    for(i=0;i<=n;i++) {       for(j=0;j<=n;j++)   {         a[i][0]=1;         a[i][i]=1;

编程成长日记——折半查找

编写一个折半查找函数 #include<stdio.h> //编写折半查找函数 int binsearch(int a,int num[],int b ) { int left=0,right=b-1,mid=0; while(left<=right) {    int mid=(left+right)/2;  if (num[mid]<a) { left=left+1; } else if (num[mid]==a) { return mid; } else { right=mi

编程成长日记——打印菱形图案

#include<stdio.h> //打印菱形图案  int main() { int i=0,j=0,n=0; printf("请输入一个数字:\n"); scanf("%d",&n); printf("\n"); for(i=1;i<=n;i++) { for (j=1;j<=n-i;j++) { printf(" "); } for (j=1;j<=(2*i-1);j++) { p

编程成长日记————模拟三次输入密码

简单的模拟取钱时输入密码: #include<stdio.h> #include<windows.h> #include<string.h> int main () { int i=0; int n=2; char passwd[10]; char *p="123456"; for (i=0;i<3;i++) { printf("请输入密码:\n");     scanf("%s",passwd); if

编程成长日记——重拾C语言&lt;二&gt;

关于按位与&和逻辑右移>> 求一个数的二进制的时候,可以采用这种方法,向右移一位,相当于除以二,所以有以下代码: #include<stdio.h> //求一个数的二进制  int main()  {     char arr[32];    int num=0;    int i=0;    printf("请输入一个数字:");    scanf("%d",&num);    for(i=0;i<32;i++)   

编程成长日记————猜数字游戏

模拟猜数字游戏,提示用户每次应输入的数字范围. #include <stdio.h> #include <stdlib.h> //猜数字游戏 int main() { int i=0; int num =0,ret=0,choose=0; int min=1,max=100; flag: srand((unsigned)time(NULL));  ret=rand()%100+1; while(1) { printf("请输入%d~%d之间的数字:\n",min

编程成长日记——重拾C语言

人生总是需要一个契机才会去改变,其实与其说是契机,也不过是自己再给自己一次机会而已. 重拾C语言,我决定再给自己一次机会,不知道多年以后的我再次翻看这篇博客的时候会是怎样的心情,会不会记得当下身为大三狗的我终于想要告别一事无成,一无所获,一败涂地的颓废而不自知的大学生活,我不想说是为了理想而奋斗,更不是为了中华崛起,只是为了我自己,仅此而已. 感谢比特,给我一次改变的机会. 从零开始学起C语言. --------------------------------------煽情分割线-------

socket编程之三:socket网络编程中的常用函数

这节本来打算先给出常用函数介绍,再给两个代码实例,写着写着发现越来越长,决定把代码放在下一节. 本节内容持续更新...... 1 socket()函数 原型: int socket(int domain, int type, int protocol); 描述: 类似打开一个文件,返回一个socket描述符,唯一标识一个socket,后面相应的操作都是这用这个socket描述符. 参数: domain:协议族,常用的协议族有AF_INET.AF_INET6.AF_LOCAL.AF_ROUTE等:

JAVA编程“性能说”(java编程需要做的26件事)

转载于 http://www.csdn.net/article/2012-06-01/2806249 最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方. 1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 控