赚钱
题目的意思是让我们根据小明的上班时间和下班时间来求得小明的年薪。
题目说的年薪都是按闰年计算,闰年有366天。
年薪 = 366 * 日薪
日薪 = k * t 其中k为小明每秒得到的钱,t为小明每天工作的时间(单位为秒)
现在需要计算的就是小明每天工作的时间。为了方便计算我们可以把小明的上班时间和下班时间全部都转化为距离一天的开始(0:0:0)已经过去了多少秒,将下班的时间减去上班的时间就得到了小明每天工作的时间(单位秒)
代码
#include <stdio.h>
int h1, d1, s1, h2, d2, s2, k;
int main()
{
scanf("%d%d%d%d%d%d%d", &h1, &d1, &s1, &h2, &d2, &s2, &k);
int t1 = h1 * 3600 + d1 * 60 + s1; // t1为小明的上班时间转化的秒数
int t2 = h2 * 3600 + d2 * 60 + s2; // t2为小明的小班时间转化的秒数
int t = t2 - t1; // 小明每天的工作时间
int ans = 366 * k * t;
printf("%d\n", ans);
return 0;
}
寻找优美数
判断一个数 s s s(如 a b c d e abcde abcde)是否为“优美数”的条件为: a b c 、 b c d 、 c d e abc、bcd、cde abc、bcd、cde是否可以被 k k k整除,那么我们现在最需要得到的就是 a b c 、 b c d 、 c d e abc、bcd、cde abc、bcd、cde。
a b c = s / 100 abc = s / 100 abc=s/100, b c d = s bcd = s %10000/10 bcd=s, c d e = s cde = s cde=s% 1000 1000 1000 。
判断一个数s是否能被k整除: s s s % k k k == 0,题目求将[10000, 99999]中的所有为"优美数"的都是输出。可以直接从10000到99999循环,对每个数判断是否为"优美数",如果是优美数就输出该数。
代码
#include <stdio.h>
int main()
{
int k;
bool st = 0; // 判断是否存在“优美数”
scanf("%d", &k);
for(int i = 10000; i < 100000; i ++)
{
int a1 = i / 100, a2 = i % 10000 / 10, a3 = i % 1000;
if(a1 % k == 0 && a2 % k == 0 && a3 % k == 0) // 判断该数是否为“优美数”
{
printf("%d\n", i); // 如果该数为“优美数”,就将该数输出
st = 1; // 同时将st变成1,表示已经存在了“优美数”
}
}
if(!st) printf("NO\n"); // 如果不存在优美数就输出"NO"
return 0;
}
x的胞兄胞弟到底有多少哇
判断一个数s是否x的胞兄胞弟的条件为: s s s % x x x == 0。
现在我们需要求在一个区间[l, r]内有多少个x的胞兄胞弟,这个可以用一个循环来判断,对从l开始循环到r中的数判断是否满足为x的胞兄胞弟。
代码
#include <stdio.h>
int main()
{
int t;
scanf("%d", &t);
while(t --) // 因为题目中有多组数据,所以需要用一个循环来输入和输出
{
int l, r, x;
scanf("%d%d%d", &l, &r, &x);
if(l > r) // 因为输入的数据不一定是l<r,所以当l>r时,就要将l和r交换
{
int t = r; // t用来存储中间值
r = l;
l = t;
}
int cnt = 0; // cnt 用来统计x的胞兄胞弟的个数
for(int i = l; i <= r; i ++)
if(i % x == 0) // 判断该数是否为“优美数”
cnt ++; // 如果当前数是x的胞兄胞弟则cnt加1
printf("%d\n", cnt);
}
return 0;
}
奇数偶数和
- 奇数+奇数=偶数
- 奇数+偶数=奇数
所以- 先统计初始状态分别奇数和偶数的和
- 然后判断是给奇数加还是给偶数加,以及是加偶数还是加奇数
#include <iostream>
#include <cstring>
#include <algorithm>
//#include <stdio.h>
using namespace std;
const int N = 66;
typedef long long LL;
void solve(){
int n, q; cin >> n >> q;
//scanf("%d%d", &n, &q);
LL cl = 0, cr = 0, sl = 0, sr = 0;
//依次记录奇数的个数,偶数的个数,奇数和,偶数和
for (int i = 1; i <= n; i ++ ){
LL x; cin >> x; //scanf("%lld", &x);
if(x % 2){
cl ++, sl += x;
}else{
cr ++, sr += x;
}
}
while (q -- ){
LL x, c; cin >> x >> c;
//scanf("%d%d", &x, &c);
if(x){ //x=1 给所有奇数加
if(c % 2){ //奇数
sl += cl * c; //给cl个奇数+c
//奇数+奇数=偶数
sr += sl, sl = 0;
//奇数累加到偶数上面,奇数清0
cr += cl, cl = 0;
}else{ //偶数
//奇数+偶数=奇数
sl += cl * c;
}
}else{ //x=0 给所有偶数加
if(c % 2){ //+奇数
sr += cr * c; //给cr个偶数分别+c
//偶数+奇数=奇数
sl += sr, sr = 0;
//把所有偶数累加到奇数上,偶数清0
cl += cr, cr = 0;
}else sr += cr * c;
}
cout << sl + sr << endl; //每一轮输出
//printf("%lld", sl + sr);
}
}
int main(){
int t; cin >> t; //scanf("%d", &t);
while (t -- ){
solve();
}
return 0;
}
密码密室
- 字符串读入需要注意,也可以以字符数组的形式读入
char s[N]; cin >> s; //scanf("%s", s);
- 'U’就要-1还原
- 'D’就要+1还原
- 因为是循环的所以%10就是0~9轮转循环
- 需要注意的是-1时可能得到的为负数,所以
(a[i] - 1 + 10) % 10;
C++
#include <iostream>
#include <cstring>
#include <algorithm>
//#include <stdio.h>
//#include <string.h>
using namespace std;
const int N = 111;
int a[N];
void solve(){
int n; cin >> n; //scanf("%d", &n);
for (int i = 0; i < n; i ++ ) cin >> a[i];
//scanf("%d", &a[i]);
for (int i = 0; i < n; i ++ ){
int x; cin >> x; //scanf("%d", &x);
string s; cin >> s; //scanf("%s", &s);
for (int j = 0; j < x; j ++ ){
if(s[j] == 'U') a[i] = (a[i] - 1 + 10) % 10;
else a[i] = (a[i] + 1) % 10;
}
}
for (int i = 0; i < n; i ++ ) cout << a[i] << ' ';
puts(""); //printf("\n");
}
int main(){
int t; cin >> t; //scanf("%d", &t);
while (t -- ){
solve();
}
return 0;
}
C
#include <stdio.h>
#include <string.h>
const int N = 111;
int a[N];
char s[N];
void solve(){
int n; scanf("%d", &n);
for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]);
for (int i = 0; i < n; i ++ ){
int x; scanf("%d", &x);
scanf("%s", s);
for (int j = 0; j < x; j ++ ){
if(s[j] == 'U') a[i] = (a[i] - 1 + 10) % 10;
else a[i] = (a[i] + 1) % 10;
}
}
for (int i = 0; i < n; i ++ ) printf("%d ", a[i]);
printf("\n");
}
int main(){
int t; scanf("%d", &t);
while (t -- ){
solve();
}
return 0;
}