这场比赛非常简单对比我上一届第一场周赛来说,要想成为一个高手一定要勤补题。
A.简单的签到题
#include<stdio.h>
int main(){
printf("美人不我期,Cia木日零llo~(∠·ω< )⌒★。\n");
}
B.简单的打印
遍历一遍即可,记得要换行
#include<stdio.h>
int main(){
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++){
printf("Hello World\n");
}
}
C.数组
把答案放入数组里,反向遍历一遍就行
#include <stdio.h>
int a[105]; // 开全局变量好一些
int main(){
int n;
scanf("%d",&n);
for (int i = 1; i <= n; i++){
scanf("%d",&a[i]);
}
for (int i = n; i >= 1; i--){
printf("%d ",a[i]);
}
}
可以学下递归写法
#include <stdio.h>
int a[105];
int n;
void f(int t){
if (t == n + 1) return;
f(t + 1);
printf("%d ", a[t]);
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++){
scanf("%d", &a[i]);
}
f(1);
}
D.数学
1到n每个数都判断一遍是否为3的倍数即可;
#include<stdio.h>
int main(){
int n;
scanf("%d", &n);
int cnt = 0;
for (int i = 1; i <= n; i++){
if (i % 3 == 0) cnt++;
}
printf("%d",cnt);
}
有更简单的写法
#include<stdio.h>
int main(){
int n;
scanf("%d", &n);
printf("%d",n / 3);
}
E小曾学长的数学
sqrt()是math库的函数可以开根
用海伦公式就行, 两点间的距离就是欧几里得距离公式
#include <stdio.h>
#include <math.h>
double f(double x1, double y1, double x2, double y2){
return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
int main() {
double x1, y1, x2, y2, x3, y3;
scanf("%lf %lf %lf %lf %lf %lf", &x1, &y1, &x2, &y2, &x3, &y3);
double a = f(x1,y1,x2,y2);
double b = f(x2,y2,x3,y3);
double c = f(x1,y1,x3,y3);
double p = (a + b + c) / 2.0;
double ans = sqrt(p * (p - a) * (p - b) * (p - c));
printf("%.3lf",ans);
}
F.排序
冒泡排序
#include <stdio.h>
const int N = 1005;
long long a[N];
int main() {
int n;
scanf("%d", &n);
if (n <= 0){
puts("-1");
return 0;
}
for (int i = 1; i <= n; i++){
scanf("%lld", &a[i]);
}
for(int i=1;i<=n;i++){
for(int j=i;j>=2;j--){
if(a[j]<a[j-1]){
long long c = a[j - 1];
a[j - 1] = a[j];
a[j] = c;
}
else break;
}
}
for (int i = 1; i <= n; i++) printf("%lld ", a[i]);
}
快排写法 时间更快
#include<stdio.h>
const int N = 1005;
long long a[N];
void quick_sort(long long q[], int l, int r){
if (l >= r) return;
long long x = q[l + r >> 1];
int i = l - 1, j = r + 1;
while(i < j){
do i++; while(q[i] < x);
do j--; while(q[j] > x);
if (i < j){
long long c = q[i];
q[i] = q[j];
q[j] = c;
}
}
quick_sort(q, l, j), quick_sort(q, j + 1, r);
}
int main(){
int n;
scanf("%d", &n);
if (n <= 0){
puts("-1");
return 0;
}
for (int i = 1; i <= n; i++){
scanf("%lld", &a[i]);
}
quick_sort(a,1,n);
for (int i = 1; i <= n; i++) printf("%lld ", a[i]);
}
G.找不同
遍历数组,不断更新最大值;
用个数组来记录每个元素是否存在,存在就用1表示.
#include<stdio.h>
const int N = 1005;
int a[N], cnt[N];
int n;
int main(){
scanf("%d",&n);
int max = 0;
for (int i = 1; i <= n; i++){
scanf("%d", &a[i]);
cnt[a[i]] = 1;
if (a[i] > max) max = a[i];
}
int ans = 0;
for (int i = 0; i < max; i++){
if (cnt[i]) ans++;
}
printf("%d", ans);
}
H.数字分解
当一个数字可以被分解为2^x*3^y时,说明该数的质因子只包含2和3;
当该数字将自身包含的2和3除完后不是1则它还有其他质因子;
#include <stdio.h>
int main() {
long long n;
scanf("%lld", &n);
while(n % 2 == 0) n /= 2;
while(n % 3 == 0) n /= 3;
if (n == 1) puts("Yes");
else puts("No");
}

Comments NOTHING