A
日期转换:HDU - 2133
题目描述:
今天小明想要去找小红约会,于是他中午吃过饭就跑去和妈妈说要去小红家,小明妈妈说作业写完了再去,但是小明不想写高数和现代作业(应为太难了.......)。于是,小明一直缠着妈妈,最后小明妈妈要给小明出一个问题,如果小明答对了,就让小明出去玩。已知,今天是2017年十一月25号 Saturday, 给你一个日期,说说那天是星期几?
小明一听简直快要崩溃,为了小明能过出去玩,全靠你了!!!
Input
多实例,每一组实例占一行,包括三个整数, 分别是 year(0<=year<=10000), month(0<=month<13), day(0<=day<32).
Output
输出有一行,如果数据是不合规则的,请输出"illegal", 否则请输出那一天是星期几。
Sample Input
2017 11 25
Sample Output
Saturday
Hint
星期一, 星期二, 星期三, 星期四,星期五,星期六,星期日,分别是:Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
注意输入数据不合规则的情况
代码:
模拟题 公元元年1月1号是周一,然后模拟就行了 特别需要注意输入数据不合规则的情况
#include<bits/stdc++.h>
using namespace std;
int rn(int y)//对闰年的判断
{
if(y%400==0||(y%4==0&&y%100!=0))
return 1;
return 0;
}
int main()
{
int i,y,m,d;
int t[2][31]= {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};//二维数组存平年和闰年每个月的天数
while(scanf("%d %d %d",&y,&m,&d)!=EOF) {
if(rn(y)==0&&m==2&&d>28||y==0||m==0||d==0||d>t[rn(y)][m]||m>12)//对不合规则的日期的判断
{
printf("illegal\n");
}
else
{
for(i=1; i<y; i++)
d+=365+rn(i);
for(i=1; i<m; i++)
d+=t[rn(y)][i];//d为从元年一月一日到输入日期的总天数
d%=7;
if(d==0)
printf("Sunday\n");
else if(d == 1)
printf("Monday\n");
else if(d == 2)
printf("Tuesday\n");
else if(d == 3)
printf("Wednesday\n");
else if(d == 4)
printf("Thursday\n");
else if(d == 5)
printf("Friday\n");
else if(d == 6)
printf("Saturday\n");
}
}
return 0;
}
B
分数矩阵:HDU - 2133
题目描述:
我们定义如下矩阵:
1/1 1/2 1/3
1/2 1/1 1/2
1/3 1/2 1/1
矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增。
请求出这个矩阵的总和。
1/1 1/2 1/3
1/2 1/1 1/2
1/3 1/2 1/1
矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增。
请求出这个矩阵的总和。
Input
每行给定整数N (N<50000),表示矩阵为 N*N.当N为0时,输入结束。
Output
输出答案,保留2位小数。
Sample Input
1 2 3 4 0
Sample Output
1.00 3.00 5.67 8.83
代码:
规律题:由表可看出数据关于对角线对称,所以只需求出一半即可,最后乘以2再把对角线上数据和减去就行了
#include<stdio.h>
int main() {
int n ;
while( scanf("%d" , &n ) != EOF ) {
if( !n ) break ;
int d = n ;
double sum = 0 ;
for(int i=1 ; i<=n ; i++ ) {
sum += ( 1.0 / i ) * d ;
d -- ;
}
sum *= 2 ;
sum -= ( 1.0 / 1 ) * n ;
printf("%.2lf\n" , sum ) ;
}
return 0 ;
}
F
共同富裕:HihoCoder - 1619
题目描述:
今天咱们来上一节有意思的思修课,老师要带领大家实现共同富裕。假设有N个人,每个人手里有a1、a2..........an元的钱。每次操作选中一个人ai,剩下的人获得1元。
请问多少次才能实现共同富裕。
例如对于[1, 1, 1, 2, 3]经过3步:[1, 1, 1, 2, 3] -> [2, 2, 2, 3, 3] -> [3, 3, 3, 3, 4] -> [4, 4, 4, 4, 4]。
第一行包含一个整数N。(1 ≤ N ≤ 100000)
以下N行包含N个整数a1,a2, ... aN。 (1 ≤ ai ≤ 100000)
最小的操作数
5
1
1
1
2
3
3
最小步数应该是每一个数到达最小值之和,小的变成大的,小的+1,变相就是大的-1
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,mi=100009 , A[100009] , i ;
scanf( "%d" , &n ) ;
for(i=0 ; i<n ; i++ ) {
scanf( "%d" , &A[i] ) ;
if( A[i] < mi ) mi = A[i] ;
}
long long ans = 0 ;
for(int i = 0 ; i < n ; i++ ) ans += A[i]-mi ;
printf( "%lld\n" , ans ) ;
return 0 ;
}
其他的算水题 ...
(辣鸡编辑器!)