第六届新生程序设计竞赛—热身赛(C语言)
A: 90周年
麓山巍巍,湘水悠悠。积蕴九秩,襟怀八方。
2024年11月1日,湖南中医药大学迎来建校90周年华诞。
为了表达对母校的祝福,现在请你编写一个程序,输入一个正整数n,输出n个“90”,每行输出一个。输入
输入一个不超过100的正整数n。
输出
输出n行,每行包含一个“90”。
样例输入 Copy
3样例输出 Copy
90 90 90
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
while(n--){
printf("90\n");
}
return 0;
}
B: HNUCM的简单求余
HNUCM的小明同学刚开始学习编程,他希望用计算机来解决一个简单的求余问题。
输入两个正整数m和n,输出m到n之间(包含m和n)所有可被7整除,但不是5的倍数的数字,并以逗号分隔按顺序打印在一行(最后一个数字后面不要加逗号)。输入
单组输入。
输入两个正整数m和n,1<=m<n<=10^6,两者之间用英文空格分隔。输出
输出m到n之间(包含m和n)所有可被7整除,但不是5的倍数的数字,以逗号分隔按顺序打印在一行(注意:最后一个数字后面不要加逗号)。
样例输入 Copy
100 200样例输出 Copy
112,119,126,133,147,154,161,168,182,189,196
#include <stdio.h>
void solve() {
int m, n;
scanf("%d %d", &m, &n);
int t = 1;
for (int i = m; i <= n; i++) {
if (i % 7 == 0 && i % 5 != 0 && t == 1) {
t++;
printf("%d", i);
continue;
}
if (i % 7 == 0 && i % 5 != 0 && t != 1) {
printf(",%d", i);
continue;
}
}
}
int main() {
solve();
return 0;
}
C: 二零二四
2024是这样的一个四位数,它满足ABAC格式,即它的第一位和第三位相同,第二位和第四位不相同,且都不等于第一位和第三位。
现在输入两个四位正整数m和n(m<=n),统计在闭区间[m,n]之间有多少个数字满足ABAC格式?输入
单组输入。
输入两个四位正整数m和n,满足m<=n,二者之间用一个英文空格隔开。输出
输出在闭区间[m,n]之间满足ABAC格式的数字的个数,如果在[m,n]之间一个都没有则输出0。
样例输入 Copy
1000 1100样例输出 Copy
8
#include<stdio.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n);
int s=0;
for(int i=m;i<=n;i++){
int a=i%10,b=i/10%10,c=i/100%10,d=i/1000;
if(d==b&&d!=a&&d!=c&&a!=c){
s++;
}
}
printf("%d\n",s);
return 0;
}
D: pxy的笑声
pxy是一个非常喜欢笑的人,听到任何笑话都会笑,发出的笑声是有规律的,始终是“HAHAHH”,现给定一个由大写字母组成的字符串S,请重新排列S中字符的顺序,使子字符串HAHAHH作为一个连续的子字符串出现尽可能多的次数。
输入
单组输入
一行只包含大写字母的字符串S(1≤|S|≤106)。输出
输出一个整数,表示HAHAHH的最大可能出现次数。
样例输入 Copy
ABCDHHAHAHAHHA样例输出 Copy
1
#include <stdio.h>
#include <string.h>
char a[1000001];
int min(int x, int y) {
return (x < y) ? x : y;
}
void solve() {
scanf("%s", a);
int x = 0, y = 0;
for (int i = 0; i < strlen(a); i++) {
if (a[i] == 'H') {
x++;
}
if (a[i] == 'A') {
y++;
}
}
if (y < 2 || x < 4) {
printf("0\n");
}
else {
int s = min(y / 2, (x - 4) / 3 + 1);
printf("%d\n", s);
}
}
int main() {
solve();
return 0;
}
E: 算术
suzu现在手里有无穷多的卡片, 其中只有n张写着1的卡片,其余卡片均是空白的。
suzu每次会选择两张卡片,并选择将它们的和或者它们的积写在一张新的空白的卡片上,之后会丢弃选择的两张卡片。
可以发现,在经过n-1次操作之后,suzu手里只会剩下一张卡片,suzu想要最大化这张卡片上数字的值,他希望你能帮他求出这个值。
输入
每行输入一个正整数n,表示suzu有n张卡片上面写着1。(n ≤ 100)
输出
输出一个正整数,代表经过若干次操作之后所能获得的最大值。
样例输入 Copy
4样例输出 Copy
4
#include <stdio.h>
#include <math.h>
void solve() {
int n;
scanf("%d", &n);
if (n <= 4) {
printf("%d\n", n);
}
else {
int x = n / 3;
int y = n % 3;
if (y == 0) {
printf("%lld\n", (long long)pow(3LL, x));
}
if (y == 1) {
printf("%lld\n", (long long)(4LL) * (long long)pow(3LL, x - 1));
}
if (y == 2) {
printf("%lld\n", (long long)(2LL) * (long long)pow(3LL, x));
}
}
}
int main() {
solve();
return 0;
}
F: lxb的数学难题
HNUCM的90周年校庆要到了,lxb想要放松两天,所以他决定给好朋友兼组长whf出一道难题,这样就不会被布置任务啦。
题目如下:存在多少对整数(a,b)满足lcm(a,b)/gcd(a,b)<=3。其中(1<=a,b<=n).
lcm(a,b)表示数字a和b的最小公倍数,gcd(a,b)表示a和b的最大公约数。
可是数学不好的lxb忘记答案是什么了,你能帮帮他吗?输入
单组输入
每行输入一个T。(T<=1e4)
接下来T行每行输入一个整数n (n<=1e8)。输出
共输出T行。
每行一个整数代表满足条件的整数对的数量。样例输入 Copy
3 1 2 3样例输出 Copy
1 4 7提示
对于n=1 只有(1,1)满足
对于n=2,有(1,1),(1,2),(2,1),(2,2)满足
对于n=3,除了(2,3)和(3,2)以外,其他的7对都满足
#include<stdio.h>
void solve(){
int n;
scanf("%d",&n);
printf("%d\n",n+(n/2)*2+(n/3)*2);
}
int main(){
int t;
scanf("%d",&t);
while(t--){
solve();
}
return 0;
}