EG1:
//char1个字节
//int四个字节
//1个字节八个比特位
#include <stdio.h>
int main()
{
//0~255
unsigned char a = 200;
//00000000000000000000000011001000
//11001000 - a
unsigned char b = 100;
//00000000000000000000000001100100
//01100100 - b
unsigned char c = 0;
c = a + b;
//00000000000000000000000011001000 - a
//00000000000000000000000001100100 - b
//00000000000000000000000100101100 -a+b
//00101100 - c
//
printf("%d %d", a + b, c);
//300 44
return 0;
}
EG2:
//需要十六位的8个
int main()
{
unsigned int a = 0x1234;
unsigned char b = *(unsigned char*)&a;
printf("%d\n", b);
return 0;
}
//大端:大存小,小存大
//看起来是顺序一样的
//0x 00 00 12 34(最右是最低测,取得是0x00)
EG3:猜名词
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
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))
{//1*2*3*4*5
if(a*b*c*d*e == 120)
printf("a=%d b=%d c=%d d=%d e=%d\n",
a, b, c, d, e);//去除名次相等的可能
}
}
}
}
}
}
return 0;
}
EG4:猜凶手
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
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;
}
//类比:
1.赛马进行多少次比赛,可以确定前三名
36匹,6跑道
首先,6场比赛,决定出6个第一
再,6个第一决定出123
后,第一的那一队再决定出123
第二的那一队决定出12
第三的那一队决定出1
123121决定出123
共进行8次比赛
EG5:杨辉三角
int main()
{
int arr[10][10] = { 0 };
int i = 0;
for (i = 0; i < 10; i++)
{
int j = 0;
for (j = 0; j <= i; j++)
{
if (j == 0)
arr[i][j] = 1;
if (i == j)
arr[i][j] = 1;
if (i >= 2 && j >= 1)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
}
for (i = 0; i < 10; i++)
{
int j = 0;
for (j = 0; j <= i; j++)
{
printf("%3d ", arr[i][j]);
}
printf("\n");
}
return 0;
}