一、最大公约数和最小公倍数
输入两个数据,计算他们的最大公约数和最小公倍数
运行效果:
实现代码:
#include<stdio.h>
int main(void)
{
int a,b;
printf("请输入两个数:");
scanf("%d %d",&a,&b);
//最小值
int min = a < b ? a : b;
//求最大公约数
while(a % min != 0 || b % min != 0)
{
min--;
}
printf("最大公约数为:%d\n",min);
//求最小公倍数
int c =(a*b) / min;
printf("最小公倍数为:%d\n",c);
return 0;
}
二、求前n项和
求以下数列前n项的和:2/1、3/2、5/3,8/5,13/8,21/13......
规律:1.下一项的分子 = 这一项的分子+这一项的分母
2.下一项的分母 = 这一项的分子
运行效果:
代码展示:
#include<stdio.h>
int main()
{
int i,n;
double sum = 0.0;
double fenzi = 2.0,fenmu = 1.0;//初始分子分母
printf("请输入要求的项数n:");
scanf("%d",&n);
for(i = 0; i < n; i++)
{
sum += fenzi / fenmu;
double temp = fenzi;
fenzi = fenzi + fenmu; // 下一项的分子
fenmu = temp; // 下一项的分母
}
printf("前 %d 项和为 %.2f\n", n, sum);
return 0;
}
三、统计二进制数1出现次数
计算一个数,它的二进制格式里面有多少个1。
运行效果:
代码展示:
#include<stdio.h>
int main()
{
int count = 0;
unsigned int n;
printf("请输入一个正数:");
scanf("%d",&n);
while(n != 0)
{
//判断低位是否为1
if(n & 1 == 1)
{
count++;
}
//改变n值
n = n >> 1;
}
printf("%d",count);
return 0;
}
四、人民币兑换方案---穷举法
用100元人民币兑换5元、2元、1元人民币共50张,每种人民币至少1张,
问共有多少种兑换方案,输出每一种方案三种人民币的数量。
运行效果:
代码展示:
#include<stdio.h>
int main()
{
int count = 0;
int x,y,z;
//100块钱,最多有20张5元
for(x = 1; x <= 20; x++)
{
//最多有50张2元
for(y = 1; y <= 50; y++)
{
//最多有100张1元
for(z = 1; z <= 100; z++)
{
if(x+y+z==50&&5*x+2*y+z==100)
{
count++;
printf("方案 %d: 5元=%d张, 2元=%d张, 1元=%d张\n", count, x, y, z);
}
}
}
}
printf("共有 %d 种兑换方案。\n", count);
return 0;
}
五、判断日期
输入日期,打印该日期是该年的第几天
运行效果:
代码展示:
第一种方法
#include<stdio.h>
int main(void) {
int year, month, day;
printf("请输入日期 (年-月-日)\n");
scanf("%d %d %d", &year, &month, &day);
int count = 0; // 统计总天数
// 判断是否是闰年
int isLeap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
switch (month) {
case 12:
count += 30; // 累加11月的天数
case 11:
count += 31; // 累加10月的天数
case 10:
count += 30; // 累加9月的天数
case 9:
count += 31; // 累加8月的天数
case 8:
count += 31; // 累加7月的天数
case 7:
count += 30; // 累加6月的天数
case 6:
count += 31; // 累加5月的天数
case 5:
count += 30; // 累加4月的天数
case 4:
count += 31; // 累加3月的天数
case 3:
count += isLeap ? 29 : 28; // 累加2月的天数,考虑闰年
case 2:
count += 31; // 累加1月的天数
case 1:
count += 0; // 1月不需要累加
}
// 加上当前月份的天数
count += day;
// 打印结果
printf("%d年%d月%d日是该年的第%d天\n", year, month, day, count);
return 0;
}
第二种方法
#include <stdio.h>
int main(void)
{
int year, month, day;
int i;
printf("请输入日期(年-月-日):\n");
scanf("%d %d %d", &year, &month, &day);
int count= 0; // 统计总天数
// 判断是否是闰年
int isLeap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
// 每个月的天数
int daysInMonth[] = {31, isLeap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 累加前几个月的天数
for ( i = 0; i < month - 1; i++) {
count += daysInMonth[i];
}
// 加上当前月份的天数
count += day;
// 打印结果
printf("%d年%d月%d日是该年的第%d天\n", year, month, day, count);
return 0;
}