本文主要是介绍C语言经典例题(6) --- 猜小偷、猜名词、模拟实现atoi、最小公倍数、二进制奇偶交换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1.猜小偷
- 2.猜名次
- 3.模拟实现atoi
- 4.正整数A和正整数B的最小公倍数是指能被A和B整除的最小的正整数,设计一个算法,求输入A和B的最小公倍数。
- 5.写一个宏,可以将一个整数的二进制数的奇数位和偶数位交换。
1.猜小偷
题目内容:某地发生了一件偷窃案,通过排查确定必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说。
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是小偷。
#include <stdio.h>int main()
{char killer = 0;for (killer = 'A'; killer <= 'D'; killer++){if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3){printf("%c\n", killer);}}return 0;
}
2.猜名次
题目内容:5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
#include <stdio.h>int main()
{int a = 0;int b = 0;int c = 0;int d = 0;int e = 0;for (a = 1; a <= 5; a++){for (b = 1; b <= 5; b++){for (c = 1; c <= 5; c++){for (d = 1; d <= 5; d++){for (e = 1; e <= 5; e++){if (((b == 2) + (a == 3) == 1) &&((b == 2) + (e == 4) == 1) &&((c == 1) + (d == 2) == 1) &&((c == 5) + (d == 3) == 1) &&((e == 4) + (a == 1) == 1)){if(a * b * c * d * e == 120)printf("a=%d b=%d c=%d d=%d e=%d ",a, b, c, d, e);}}}}}}return 0;
}
3.模拟实现atoi
#include <stdio.h>
#include <limits.h>
#include <ctype.h>enum State
{INVALID,VALID
};enum State state = INVALID;int my_atoi(const char* p)
{int flag = 1;if (p == NULL){return 0;}if (*p == '\0'){return 0;}while (isspace(*p)){p++;}if (*p == '+'){flag = 1;p++;}else if (*p == '-'){flag = -1;p++;}long long n = 0;while (isdigit(*p)){n = n * 10 + flag * (*p - '0');if (n < INT_MIN || n>INT_MAX){return 0;}p++;}if (*p == '\0'){state = VALID;return (int)n;}else{return (int)n;}
}int main()
{const char* p = " -14a";int ret = my_atoi(p);if(state == VALID)printf("合法:%d\n", ret);elseprintf("非法:%d\n", ret);return 0;
}
4.正整数A和正整数B的最小公倍数是指能被A和B整除的最小的正整数,设计一个算法,求输入A和B的最小公倍数。
输入描述:输入两个正整数A和B。
输出描述:输出A和B的最小公倍数。
输入:5 7
输出:35
#include <stdio.h>int main()
{int a = 0;int b = 0;int i = 0;scanf("%d %d", &a, &b);for (i = 1; ;i++){if (a * i % b == 0){printf("%d\n", a*i);break;}}return 0;
}
5.写一个宏,可以将一个整数的二进制数的奇数位和偶数位交换。
#include <stdio.h>//偶位数右移一位 + 奇数位左移一位//获得偶数位 获得奇数位//10101010101010101010101010101010 //01010101010101010101010101010101
#define SWAP(N) ((N & 0xaaaaaaaa) >>1) + ((N & 0x55555555) <<1)int main()
{int N = 10;int ret = SWAP(N);printf("%d\n", ret);return 0;
}
这篇关于C语言经典例题(6) --- 猜小偷、猜名词、模拟实现atoi、最小公倍数、二进制奇偶交换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!