随笔 - 291  文章 - 0 评论 - 0 阅读 - 4715
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

趣味算法入门

1.百钱百鸡问题

#include<iostream>
using namespace std;
int main()
{
int x, y, z;//x:公鸡 y:母鸡 z: 小鸡
for ( x = 0; x <= 20; x++)
{
for (y = 0; y <= 33; y++)
{
z = 100 - x - y;//这里x,y确定了,那么z的值也一定可以确定了,不用在穷举z了
if ((5 * x + 3 * y + z / 3 == 100) && (x + y + z == 100))
{
cout << "公鸡:" << x ;
cout << "母鸡:" << y;
cout << "小鸡:" << z << endl;
}
}
}
}

2.借书方案

#include<iostream>
using namespace std;
int main()
{
int a, b, c,i=0;
for (a = 1; a <= 5; a++)
{
for (b = 1; b <= 5 && a != b; b++)//这里可以判断一次a是否和b相等,如果相等可以直接不用进行c的循环
{
for (c = 1; c <= 5; c++)
{
if (a != c && b != c)
{
cout << "A: " << a << " B;" << b << " C: " << c << " | ";
i++;
}
if (i % 4 == 0)
{
cout << endl;
}
}
}
}
cout << "一共有" << i << "种" << endl;
}

3.打鱼还是晒网

#include<iostream>
using namespace std;
struct Date
{
int year;
int month;
int day;
};
bool runyear(int year)//判断是否为闰年
{
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
return true;
}
return false;
}
int countdat(Date& d)
{
int Month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };//每一个平年的天数
int totalday = 0;
//接下来先计算年的天数,然后是月,最后是日
//1.计算到前一年所需要的天数
for (int year = 1990; year < d.year; year++)
{
if (runyear(year))//如果是闰年,加366天
{
totalday += 366;
}
else
{
totalday += 365;
}
}
//2.计算该年的月份的天数
if (runyear(d.year)) { Month[2]++; }//如果是闰年,那么2月份应该为29天
for (int i = 1; i < d.month; i++)
{
totalday += Month[i];//将本年月份的天数加上去
}
//3.将本年的日加上去
totalday += d.day;
return totalday;
}
int main()
{
Date d;
int totalday, result;//totalday指的是一共的天数,result是对5取余
cout << "请输入年月日:";
cin >> d.year >> d.month >> d.day;
totalday = countdat(d);
result = totalday % 5;
if (result > 0 && result < 4)
{
cout << "今天打渔" << endl;
}
else
{
cout << "今天晒网" << endl;
}
}

抓交通肇事犯

一脸卡车撞人逃跑,三人目击,但没有记住车牌号,之记下了车号的特征。甲:牌照前两位数是相同的 乙:牌照的后两位是也是相同的,但是与前两位不同 丙:他是数学家,四位的车号刚好是一个整数的平方。

请求出车牌号

#include<iostream>
using namespace std;
int main()
{
int i, j,k, temp;//i代表前两位,j代表后两位
int flag = 0;//判断是否求出结果的,如果是改为1,则直接退出循环,减少循环次数。
for (i = 1; i <= 9; i++)
{
if (flag) { break; }
for (j = 1; j <= 9; j++)
{
if (flag) { break; }
if (i != j)
{
k = 1000 * i + 100 * i + 10 * j + j;
for (temp = 31; temp <= 99; temp++)
{
if (k == temp * temp)
{
cout << "车牌号为:" << k << endl;
flag = 1;
break;
}
}
}
}
}
}
posted on   许七安gyg  阅读(84)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示