2022级HAUT新生周赛(一)题解
A
简单的输出
注意输出 " 和 \ 需要在前面加 \
#include <stdio.h>
int main()
{
printf("\"I really love haut!\\n\";");
return 0;
}
B 工作罢了
只需要找到数学成绩最高并且输入最早的,并且再计算四项平均成绩即可
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
double ch, ma, en, sc;
double s_ch = 0, s_ma = 0, s_en = 0, s_sc = 0;
int max_sum = 0, max_math = 0;
for (int i = 0; i < n; i++)
{
scanf("%lf%lf%lf%lf", &ch, &ma, &en, &sc);
if (ma > max_math)
{
max_math = ma;
max_sum = ch + ma + en + sc;
}
s_ch += ch, s_ma += ma, s_en += en, s_sc += sc;
}
printf("%d\n", max_sum);
printf("%.2f %.2f %.2f %.2f", s_ch / n, s_ma / n, s_en / n, s_sc / n);
return 0;
}
C 挑选礼物,但是收礼人
简单的模拟,用数组(也可以不用)记录初始位置,然后根据输入交换就行
#include <stdio.h>
int main()
{
int n, p;
scanf("%d%d", &n, &p);
int a[4];
scanf("%d%d%d", &a[1], &a[2], &a[3]);
for (int i = 0; i < n; i++)
{
int b1, b2;
scanf("%d%d", &b1, &b2);
int k = a[b1];
a[b1] = a[b2];
a[b2] = k;
}
for (int i = 1; i <= 3; i++)
{
if (a[i] == p)
{
printf("%d", i);
}
}
return 0;
}
D 表白
输入字符串然后直接循环加和即可
#include <stdio.h>
int main()
{
int n = 0;
char str[100010];
scanf("%s", str);
for (int i = 0; str[i] != '\0'; i++)
{
n += str[i];
}
printf("%d", n);
return 0;
}
/*#include <stdio.h>
int main()
{
int n = 0;
char str[100010];
int i = 0;
while (scanf("%c", &str[i]) != EOF)
{
n += str[i];
i++;
}
printf("%d", n);
return 0;
}*/
E 约会?干饭!
简单的博弈论
因为每人每次只能取一个石子,只需要知道石子总数的奇偶性,奇数卷卷赢,偶数聚聚赢
另外注意输出复制粘贴,一个中文叹号一个英文叹号
#include <stdio.h>
int n, x, sum;
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d", &x);
sum += x;
sum %= 10; // 奇偶性只需要判断个位
}
if (sum % 2 != 0)
puts("火锅!");
else
puts("牛排!");
return 0;
}
F 免费餐食 ^o^y
记录最大连续次数的数字和次数即可
#include <stdio.h>
int main()
{
int n,a[1010];
scanf("%d", &n);
int ans_num = 0, ans_sum = 0, mid_sum = 1; //mid_sum作为标志记录数字出现连续的次数
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
if(a[i] == a[i-1]) //判断是否和上个数字一样,即是否连续
{
mid_sum++;
if(mid_sum >= 2)
{
if(mid_sum == ans_sum) //连续次数一样判断数字大小,要数字大的
{
if(a[i] > ans_num)
ans_num = a[i];
}
else if(mid_sum > ans_sum) //连续次数不一样直接更改
{
ans_num = a[i];
ans_sum = mid_sum;
}
}
}
else
mid_sum = 1; //如果和上个数字不一样,即不连续,就重置mid_sum
}
printf("%d %d", ans_num, ans_sum);
return 0;
}
G 好数
判断前后两位递增递减并记录次数,最后递增次数除以递增递减总和即可
也可以用字符判断,更简单了(
#include <stdio.h>
int main()
{
long long n;
scanf("%lld", &n);
long long x = n % 10;
n /= 10;
int num_increase = 0, num_decrease = 0, sum = 0;
while (n > 0)
{
int y = n % 10;
if (x != y)
{
sum++;
if (x > y)
num_increase++;
else
num_decrease++;
}
x = y;
n /= 10;
}
double ans = (double)num_increase / (double)sum;
if (ans > 0.7)
printf("YES ^_^");
else
printf("no!!! X_X");
return 0;
}
H lycoris
括号配对符合基本语法,即对于相同括号,前括号在前,后括号在后就算匹配成功
(同种括号)记录非匹配括号数量和匹配括号数量,出现前括号非匹配次数++,出现后括号非匹配次数--并且匹配次数++,如果非匹配数量为0,则出现后括号不做变动
#include <stdio.h>
int main()
{
char str[10010];
scanf("%s", str);
int s = 0, m = 0, l = 0;
int ss = 0, mm = 0, ll = 0;
for (int i = 0; str[i] != '\0'; i++)
{
if (str[i] == '(')
s++;
else if (str[i] == '[')
m++;
else if (str[i] == '{')
l++;
else if (str[i] == ')')
{
if (s != 0)
{
s--;
ss++;
}
}
else if (str[i] == ']')
{
if (m != 0)
{
m--;
mm++;
}
}
else if (str[i] == '}')
{
if (l != 0)
{
l--;
ll++;
}
}
}
printf("%d %d %d", mm, ss, ll);
return 0;
}
阿里云工作强度 727人发布