目录
1. 喝汽水问题
//喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水
// 法一:正常解法
#include<stdio.h>
int main()
{
int money = 0;
int total = 0;
scanf("%d", &money);
int empty = 0;
total += money;
empty += money;
while (empty >= 2)
{
total += empty / 2;
empty = empty / 2 + empty % 2;
}
printf("%d\n", total);
return 0;
}
当我们举了足够多的例子时,我们可以发现一个规律:瓶数=钱数*2-1
因而引申出法二(特殊解法)
#include<stdio.h>
int main()
{
int money = 0;
int total = 0;
scanf("%d", &money);
if (money <= 0)
total = 0;
else
total = money * 2 - 1;
printf("%d\n", total);
return 0;
}
2. 调整奇数偶数顺序
要求:
//输入一个整数数组,实现一个函数,
//来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
//所有偶数位于数组的后半部分。
#include<stdio.h>
void print(int arr[], int sz)
{
int i = 0;
for (i = 0; i <sz; i++)
{
printf("%d ", arr[i]);
}
}
void move(int arr[], int sz)
{
int* left = arr;
int* right = arr + sz - 1;
while (left < right)
{
//从左向右找一个偶数
while ((left < right) && *left % 2 != 0)
{
left++;
}
//从右向左找一个奇数
while ((left < right) && *right % 2 != 1)
{
right--;
}
//将奇数和偶数相交换
if (left < right)
{
int tmp = 0;
tmp = *left;
*left = *right;
*right = tmp;
}
}
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
print(arr, sz);
move(arr, sz);
printf("\n");
print(arr, sz);
return 0;
}
3. 杨辉三角
//1
//1 1
//1 2 1
//1 3 3 1
//……
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int arr[10][10] = { 0 };
for (i = 0; i < 10; i++)
{
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] + arr[i - 1][j - 1];
}
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
4. 猜凶手
//以下为4个嫌疑犯的供词:
//A说:不是我。
//B说:是C。
//C说:是D。
//D说:C在胡说
//已知3个人说了真话,1个人说的是假话。
//现在请根据这些信息,写一个程序来确定到底谁是凶手。
#include<stdio.h>
int main()
{
int killer = 0;
for (killer = 'a'; killer <= 'd'; killer++)
{
if ((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd') == 3)
{
printf("%c\n", killer);
}
}
return 0;
}
5. 猜名次
//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\n", a, b, c, d, e);
}
}
}
}
}
}
}
return 0;
}