目录
1排队等电梯
2.猜数字游戏
3.三个数按从大到小输出
方法一:
方法二(三目运算符):
4.最大公约数和最小公倍数
最大公约数
求法1
辗转相除法
最小公倍数
方法1
方法2(for循环)
学校教学楼的电梯前排了很多人,前面有n个人在等电梯。电梯每次可以乘坐12人,每次上下需要的时间为4分钟(上需要2分钟,下需要2分钟)计算还需要多少分钟才能乘电梯到达楼上。(假设最初电梯在1层)
#include
int main()
{
int a = 0;
scanf("%d", &a);
if (a <= 11)
printf("2");// 人数小于等于11的时候可直接上电梯
else
printf("%d", (a / 12) * 4 + 2);//人数多时,12个人一部电梯,除12求出前的次数,一次4分
//钟就是乘4,最后加上自己坐电梯的两分钟
return 0;
}
需要用到的头文件
#include
#include
#include
通过两个菜单函数和游戏函数来进行晚上游戏选项,通过rang,srand函数生成随机数,srand函数需要通过时间戳来随机生成数字。
#include
#include
#include
void menu() //这是一个菜单选项
{
printf("********************************\n");
printf("******* 1. play *******\n");
printf("******* 0. exit *******\n");
printf("********************************\n");
}
void game() //猜数字游戏的具体操作
{
int ret = rand() % 100 + 1;//(生成随机数)
int num = 0;
//2.猜数字
while (1)
{
printf("请猜数字:");
scanf("%d", &num);
if (num == ret)
{
printf("恭喜你,猜对了\n");
break;
}
else if (num > ret)
{
printf("猜大了\n");
}
else
{
printf("猜小了\n");
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//rand函数生成的随机值是固定的,需要调用srand函数来使其
//随机,方式是通过时间戳获得随机的数字,srand需要接收的
//类型是unsigned in他,但是time的类型是time_c 所以需要
//进行强制类型转换
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input) //switch语句来进行对游戏选项的选择
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input); //通过do-while 语句来不断地进行游戏,直到输入0时,才能结束游戏
return 0;
}
输入a,b,c 三个数,将最大值,中间值,最小值分别放在a,b,c中输出。
具体步骤如下:
(1)先比较a和b的大小,将较大者放在a中,较小者放在b中。当a值较小时,需要以下操作。
ret1 = a,a = b,b = ret1;
(2)再比较a和c的大小,较大值放在a中,较小值放在c中。当a值较小时,需要以下操作。
ret2 = a,a = c,c = ret2;
(3)最后比较b和c的大小,较大值放在b中,较大值放在c中。当b值较小时,需要以下操作。
ret3 = b,b = c,c = ret3;
总体的代码如下:
#include
int main()
{
int ret1, ret2,ret3;
int a = 0, b = 0, c = 0;
scanf("%d%d%d", &a, &b, &c);
if (a < b)
{
ret1 = a,a = b,b = ret1;
}
if (a < c)
{
ret2 = a,a = c,c = ret2;
}
if (b < c)
{
ret3 = b,b = c,c = ret3;
}
printf("%d %d %d", a, b, c);
return 0;
}
通过三目运算符来实现最大值,中值,最小值。
如下三目运算符表示 如果a>b成立就把a赋值给ret,否则就把b赋值给ret。
int ret = a>b?a:b
(1)求最大值
先求出a,b的较大值,再和c进行比较,求出较大值,也就是三个数的最大值。
max = (a > b ? a : b) > c ? (a > b ? a : b) : c;
(2)求中间值
先求出a,b的较大值再和c比较后,如果前者大那就是c为中间值,反之a,b的较大者为中间值
mid = (a > b ? a : b) > c ? c : (a > b ? a : b);
(3)求最小值
先求出a,b的较小值,和c比较后,哪个值小就把哪个值存放在中。
min = (a > b ? b : a) > c ? c : (a > b ? b : a);
整个程序的代码如下:
#include
int main()
{
int a, b, c;
int max, mid, min;
scanf("%d%d%d", &a, &b, &c);;
max = (a > b ? a : b) > c ? (a > b ? a : b) : c;
mid = (a > b ? a : b) > c ? c : (a > b ? a : b);
min = (a > b ? b : a) > c ? c : (a > b ? b : a);
printf("%d %d %d\n", max, mid, min);
return 0;
}
通过for循环语句来实现i从到两数之间较小数的值遍历(依次减一),当i可以被两个整除时,第一个出现的就是最大公约数。
可以通过三目运算符来找出两者的较小值将其存放在min中
int min=a < b ? a : b;
for (int i = min; i >= 2; i--)
{
if (a % i == 0 && b % i == 0)
{
printf("%d\n", i);
break;
}
}
通过从较小值往下遍历,依次减一,找到既能被a整除,就能被b整除的最大的数就是最大公约数。
求法2
例如: 36 28
36%28 =8;
28%8=4;
8%4=0;(余数是0,则4为最大公约数)
通过除于取模的方法,不断地相除直到最后得出0,最后除于的那个数即为最大公约数。
#include
int main()
{
int a, b;
scanf("%d%d", &a, &b);
while (b != 0) //余数为b,不等于0时执行,当b=0时,退出,此时的a的值就是最大公约数
{
int tmp = a % b; //引入tmp来进行辗转相除
a = b;
b = tmp;
}
printf("%d", a);
return 0;
}
给定两个数a,b,最大公约数m,最小公倍数n。
满足: a * b = m * n 的关系。
可以先求出a,b两者的较大值,for循环从i (较大值)开始遍历,直到能够整除a,b,此时最小公倍数就是i。
#include
int main()
{
int a = 0, b = 0;
scanf("%d%d", &a, &b);
int max = a > b ? a : b;//求出较大值赋给max
for (int i = max;; i++)
{
if (i % a == 0 && i % b == 0)
{
printf("最小公倍数为%d", i);
break;//当能整除a和b时,跳出循环,此时的i就是最小公倍数
}
}
return 0;
}
CSDN - 专业开发者社区