题目A日期统计题目链接:
题目:
题目思路:
步骤一:创建一个数组a[]用来存放100个数据
步骤二:创建一个月份的数组,表示12个月份的天数
步骤三:定义一个存放结果的数组answer[]用来存放结果,其中i/10代表前缀0或者是月份10以上的1,i%10则代表月份后一位数,j/10,j%10同理
例如:i = 12
i/10 = 1; i%10 = 2;
i = 9
i/10 = 0; i%10 = 9
完整代码:
//5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2
//7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1
//0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int a[] = { 5, 6, 8, 6, 9, 1, 6, 1, 2, 4, 9, 1, 9, 8, 2, 3, 6, 4, 7, 7, 5, 9, 5, 0, 3, 8, 7, 5, 8, 1, 5,
8, 6, 1, 8, 3, 0, 3, 7, 9, 2, 7, 0, 5, 8, 8, 5, 7, 0, 9, 9, 1, 9, 4, 4, 6, 8, 6, 3, 3, 8, 5,
1, 6, 3, 4, 6, 7, 0, 7, 8, 2, 7, 6, 8, 9, 5, 6, 5, 6, 1, 4, 0, 1, 0, 0, 9, 4, 8, 0, 9, 1, 2,
8, 5, 0, 2, 5, 3, 3};
int monthes[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int ans = 0;
for(int i = 1;i <= 12;i++)
{
for(int j = 1;j <= monthes[i];j++)
{
int answer[] = {2,0,2,3,i/10,i%10,j/10,j%10};
int t = 0;
for(int k = 0;k < 100;k++)
{
if(a[k] == answer[t])
{
t++;
if(t==8)
{
ans++;
}
}
}
}
}
cout<<ans;
return 0;
}
题目B01串的熵题目链接:
题目:
题目思路:
步骤一:设置两个变量
//h(s) = 11625907.5798 ; n= 2333 3333
int n = 23333333;
double h = 11625907.5798;
步骤二:定义一个for循环,定义一个值t表示结果,这个结果与原来的结果误差小于0.0001时就可以得到正确结果
完整代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
//h(s) = 11625907.5798 ; n= 2333 3333
int n = 23333333;
double h = 11625907.5798;
int main()
{
for(int i = 0;i < n/2;i++)
{
double t = 0;
t -= 1.0*i*i/n * log2(1.0*i/n);
t -= 1.0*(n-i)*(n-i)/n * log2(1.0*(n-i)/n);
if(abs(t-h)<0.0001)
{
cout<<i;
break;
}
}
}
题目C冶炼金属题目链接:
题目:
题目思路:
75 3 -- 75/3=25 75/(3+1)=18; 18+1=19;
53 2 -- 53/2=26 53/(2+1)=17; 17+1=18;
59 2 -- 59/2=29 59/(2+1)=19; 19+1=20;
可以看出最大值就是25,26,29的最小值
最小值是19,18,20的最大值
完整代码:
#include <bits/stdc++.h>
using namespace std;
int n;
int minx = -999999999,maxx = 999999999;
int main()
{
cin>>n;
while(n--)
{
int a,b;
cin>>a>>b;
minx = max(minx,a/(b+1) + 1);
maxx = min(maxx,a/b);
}
cout<<minx<<" "<<maxx;
return 0;
}
题目D飞机降落题目链接:
题目:
题目思路:
暴力搜索
bool dfs(int down_num, int last_time)
int down_num代表下降的飞机数目
int last_time代表上一架飞机降落的时间点--表明这辆飞机降落的时间满足Node[i].t + Node[i].d >= last_time
完整代码:
#include<bits/stdc++.h>
using namespace std;
struct node {
int t, d, l;
}Node[11];
int t, n;
bool via[11]; // 标记第 i 架飞机是否降落
/*
当前一共降落多少架飞机。
二是上一架飞机降落完毕的时间点。
对于上一架飞机,开始降落的时间点能早就早,但是不能比它自己的 “上一架” 的降落完毕的时间早
*/
bool dfs(int down_num, int last_time) {
if(down_num == n) return 1;
for(int i = 1; i <= n; i++)
{
if(!via[i] && Node[i].t + Node[i].d >= last_time)
{
via[i] = 1;
if(dfs(down_num + 1, max(last_time, Node[i].t) + Node[i].l))
return 1;
via[i] = 0;
}
}
return 0;
}
int main() {
cin >> t;
while(t--) {
memset(via, 0, sizeof(via)); // 每次记得清空
cin >> n;
for(int i = 1; i <= n; i++) {
cin>>Node[i].t>>Node[i].d>>Node[i].l;
}
if(dfs(0, 0))
cout << "YES"<<endl;
else
cout << "NO"<<endl;
}
return 0;
}