1.日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯
的一个。以下为4个嫌疑犯的供词。
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
#include <stdio.h>
int main()
{
int murderer;
for (murderer = 'A'; murderer <= 'D'; murderer++)
{
/*三真一假,在if语句的,括号里为真结果为1,要是假结果为0。
因此if括号 后面若成立,必定为三真一假,即必定等于3. */
if (((murderer != 'A') + (murderer == 'C') +
(murderer == 'D') + (murderer != 'D')) == 3)
{
printf("murderer is %c\n", murderer);
}
}
printf("\n");
system("pause");
return 0;
}
程序输出:
2.写一个宏可以将一个数字的奇数位和偶数位交换。
#include<stdio.h>
#define CHANGE(X)\
(((X&(0x55555555)) << 1) | ((X&(0xAAAAAAAA)) >> 1))
int main()
{
int x = 5;
printf("%d\n", CHANGE(x)); //5的二进制:0101 交换后得二进制:1010其值为10
system("pause");
return 0;
}
程序输出:
3.杨氏矩阵
有一个二维数组.数组的每行从左到右是递增的,
每列从上到下是递增的,在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5
1 3 4
2 4 5
4 5 6
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define ROW 3
#define COL 3
int Judge(int arr[ROW][COL], int value)
{
int i = 0;
int j = COL - 1;
int temp = arr[i][j];
while (1)
{
if (temp == value)
{
return 1;
}
else if (temp < value && j >= 0)
{
temp = arr[++i][j];
}
else if (temp > value && j >= 0)
{
temp = arr[i][--j];
}
else
{
return 0;
}
}
}
int main()
{
int arr[ROW][COL] = { 1, 3, 4, 2, 4, 5, 4, 5, 6 };
int i = 0;
int j = 0;
int value;
int ret;
printf("数组为:\n");
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
printf("%5d", arr[i][j]);
}
printf("\n");
}
printf("请输入一个数:\n");
scanf("%d", &value);
if (ret = Judge(arr, value))
{
printf("%d在数组中\n", value);
}
else
{
printf("%d不在数组中\n", value);
}
system("pause");
return 0;
}
程序输出:
4.判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1 = ABCD和s2 = ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
ABCD右旋一个字符得到DAABC
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int isturn(char *str, char *sub)
{
char *p = malloc(strlen(str) + strlen(str) + 1);
strcpy(p, str);
strcat(p, str);
if (strstr(p, sub) == NULL)
return 0;
return 1;
}
int main()
{
char buf[] = "abcdef";
char sub[] = "cdefab";
if (isturn(buf, sub) == 0)
{
printf("不是\n");
}
else
{
printf("是\n");
}
system("pause");
return 0;
}
程序输出: