分数
#include<iostream>
#include<algorithm>
using namespace std;
int gcd(int a, int b)
{
for(int i = b; ; i++)
{
if(!(i%a) && !(i%b)) return i;
}
}
int gcd1(int a, int b)
{
while(a%b)
{
int r = a%b;
a = b;
b = r;
cout << a << " " << b << " " << r << endl;
}
return b;
}
int main()
{
int up = 1, down = 1;
for(int i = 2; i <= 20; ++i)
{
int u = 1, d = pow(2, i-1); //第二项的分子和分母
int g = gcd(down, d); //最大公倍数
up = up * (g/down) + u * (g/d);
down = g;
}
cout << gcd1(3, 7) << endl;
int c = gcd1(up, down);
cout << up/c << " " << down / c;
return 0;
}
星期一
#include<iostream>
using namespace std;
int main()
{
int sum = 0;
int t = 6;
for(int i = 2000; i >= 1901; --i)
{
//366
if((i%400==0) || (i%4==0 && i%100!=0))
{
int year = 366;
year = year - t;
// cout << year << endl;
while(year - 7 >= 0)
{
sum++;
year = year - 7;
//cout << year << endl;
}
t = 7 - year;
// cout << "t" << " " << t << endl;
sum++;
}
//365
else
{
int year = 365;
year -= t;
//cout << year << endl;
while(year - 7 >= 0)
{
sum++;
year = year - 7;
// cout << year << endl;
}
t = 7 - year;
// cout << "t" << " " << t << endl;
sum++;
}
}
if(t==0) sum--; //判断1901.1.1是否为星期一,题目不包括这个范围
cout << sum - 1 << endl;
return 0;
}
航班时间
#include<iostream>
using namespace std;
int t;
int n;
int get_time()
{
int h1, m1, s1, h2, m2, s2, d = 0;
scanf("%d:%d:%d %d:%d:%d (+%d)", &h1, &m1, &s1, &h2, &m2, &s2, &d);
int time1 = d * 24 * 3600 + (h2 - h1)*3600 + (m2 - m1) * 60 + s2 - s1;
return time1;
}
int main()
{
cin >> n;
for(int i = 1; i <= n; ++i)
{
int time1 = get_time();
int time2 = get_time();
t = (time1 + time2)/2;
printf("%02d:%02d:%02d\n",t/3600, t/60%60, t%60);
}
return 0;
}
全球变暖
#include<iostream>
#include<queue>
using namespace std;
const int N = 1005;
char a[N][N];
bool stu[N][N];
int n;
int sum, ans;//统计为沉默岛数量
queue<pair<int, int>> q;
void bfs(int x, int y)
{
q.push({x, y});
stu[x][y] = true;
bool trag = true;
while(!q.empty())
{
int x = q.front().first;
int y = q.front().second;
//cout << x << " " << y << endl;
q.pop();
bool flag = true; //为沉默岛屿标记
//上 下 左 右
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
for(int i = 0; i < 4; ++i)
{
if((x + dx[i]) >= 0 && (x + dx[i]) < n && (y + dy[i]) >= 0 && (y + dy[i]) < n)
{
//寻找邻近岛屿
if(a[x+dx[i]][y+dy[i]]=='#' && !stu[x+dx[i]][y+dy[i]])
{
//进队列
q.push({x+dx[i], y+dy[i]});
stu[x+dx[i]][y+dy[i]] = true;
}
//判断岛屿是否有海
if(a[x+dx[i]][y+dy[i]]=='.') flag = false;
//cout << flag << endl;
}
}
//判断岛是否被完全淹没
if(flag) trag = false;
//cout << trag << endl;
}
ans++;
if(!trag)
{
sum += 1;
//cout << x << " " << y << endl;
}
}
int main()
{
cin >> n;
for(int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
cin >> a[i][j];
for(int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
{
if(!stu[i][j] && a[i][j] == '#')
{
//cout << i << " " << j << endl;
bfs(i, j);
}
}
cout << ans - sum << endl;
return 0;
}