10.6新生第四次娱乐场题解

mac2022-07-05  20

7-1 多组输入教学

#include <stdio.h> int main(){ int T, a, b; scanf("%d", &T); //首先把 T 读进来 while (T--){ //放在while里,每次自减一次,会自减 T 次,就达到了循环 T 次的目的 scanf("%d%d", &a, &b); //对于每次循环,进行输入,输出。 printf("%d\n", a + b); } return 0; }

7-2 “Hello World!”

考点:转义字符

#include <stdio.h> int main(){ printf("\"Hello World!\""); return 0; }

7-3 房间

考点:思维

1.所有的人都住双人间 ( n + 1 ) / 2 ∗ a (n + 1)/ 2 * a (n+1)/2a 2.所有人都住双人间,但是有一个人,自己住一个双人间。 拿出一个双人间的兄弟,三个人开一个三人间。 ( n − 2 ) / 2 ∗ a + b (n - 2) / 2 * a + b (n2)/2a+b 3.所有人都住三人间 ( n + 2 ) / 3 ∗ b (n + 2) / 3 * b (n+2)/3b 4.所有人都住三人间,但是有两个人住三人间,空一个床位 把这两个兄弟安排到一个双人间里去 n / 3 ∗ b + a n / 3 * b + a n/3b+a 5.所有人都住三人间,有一个人住三人间 拿出一个三人间的兄弟,这样就有4人,开两个双人间。 ( n − 2 ) / 3 ∗ b + a + a (n - 2) / 3 * b + a + a (n2)/3b+a+a

#include <stdio.h> int main(){ int T; scanf("%d", &T); while (T--){ long long n, a, b; scanf("%lld%lld%lld", &n, &a, &b); long long ans = 1e18; if ((n + 1) / 2 * a < ans) ans = (n + 1) / 2 * a; if ((n - 2) / 2 * a + b < ans) ans = (n - 2) / 2 * a + b; if ((n + 2) / 3 * b < ans) ans = (n + 2) / 3 * b; if (n / 3 * b + a < ans) ans = n / 3 * b + a; if ((n - 2) / 3 * b + a + a < ans) ans = (n - 2) / 3 * b + a + a; printf("%lld\n", ans); } return 0; }

7-4 构造数字

考点:思维

12

121212121212…

12个12拼接在一起

各数位的和是12 * ( 1 + 2) 1 22 333 4444 55555 666666 输出 n n n n n n 就行了。

#include <stdio.h> int main(){ int T; scanf("%d", &T); while (T--){ int n; scanf("%d", &n); for (int i = 1;i <= n; i++) printf("%d", n); printf("\n"); } return 0; }

7-5 取方格

考点:找规律

给的两个数,找到小的和大的,如果小的乘3 + 1 小于等于大的,就可以,否则就不行。

#include <stdio.h> int main() { int T; scanf("%d", &T); while (T--) { int x, y, Min, Max; scanf("%d%d", &x, &y); if (x < y) { Min = x; Max = y; } else { Max = x; Min = y; } if (Min * 3 + 1 < Max) printf("NO\n"); else printf("YES\n"); } return 0; }

7-6 Max

考点: 思维 + 数学

给你n ,c 在 [ 1 , n ] [1 , n] [1,n],找到 a , b a, b a,b,且 g c d ( a , b ) = = c gcd(a , b) == c gcd(a,b)==c

n < c n < c n<c : a , b < c a, b < c a,b<c,两个小于 c c c 的数,他们的 g c d gcd gcd,一定不会等于 c c c。此种情况输出 − 1 -1 1

n n n [ c , 2 ∗ c ) [c, 2*c) [c,2c),这种情况 a = c , b = c a = c, b = c a=c,b=c,答案就是 c 2 c^2 c2

其它的情况: 让a ,b尽量的大,a , b都是c 的倍数。 n里包含的最大的C的倍数 n / c ∗ c n / c * c n/cc a = n / c ∗ c a = n / c * c a=n/cc b = a − c b = a - c b=ac

g c d ( a , b ) = = c ? gcd (a, b) == c ? gcd(a,b)==c?

a = n / c ∗ c , b = ( n / c − 1 ) ∗ c a = n / c * c,b = (n/c-1) * c a=n/cc,b=(n/c1)c

判断 n / c , n / c − 1 n / c ,n / c - 1 n/cn/c1 是否互质。 两个相邻自然数,一定互质。

所以 g c d ( a , b ) = = c gcd(a, b) == c gcd(a,b)==c

#include <stdio.h> int main(){ int T; scanf("%d", &T); while (T--){ long long c, n, a, b; scanf("%lld%lld", &c, &n); if (n < c) printf("-1\n"); else if (n >= c && n < 2 * c) printf("%lld\n", c * c); else printf("%lld\n", (n / c * c) * ((n / c - 1) * c)); } return 0; }
最新回复(0)