ACGO元旦欢乐赛#37题解
2025-01-05 16:45:13
发布于:浙江
本次竞赛题目主要面向基本掌握了语法、接触过算法入门课程的选手。竞赛的考察范围包含顺序结构、分支结构、循环结构、数组、字符串、排序等。各位可以在比赛中总结易错点,比较好的复习。
T1
题目描述
求114514*1919810的值并输出
思路分析
本题考查的语法是:输入输出
可以直接计算的值在进行输出
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"219845122340";//用计算器敲一遍
return 0;
}
T2
题目描述
多组数据,每一组给一个整数 n,判断其各数位之和的奇偶性:
如果数位之和为奇数,输出 "YES";
如果数位之和为偶数,输出 "NO"。
思路分析
本题考查的语法是:循环和取余
循环t次,每一次将a的数位分开加起来,最后判断并输出
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){//t--相当于重复t次
int a,s=0;
cin>>a;//输入整数
while(a>0)
{
s+=a%10;//将a的最后一位数加到总和中
a/=10;//看下一位数,因为/10相当于将最后一位去掉
}
//输出
if(s%2==0) cout<<"NO";
else cout<<"YES";
cout<<endl;
}
return 0;
}
T3
题目描述
求2个数的最小公倍数
思路分析
本题考查的语法是:计算
两数最小公倍数的公式是
而最大公因数(gcd)可以用辗转相除求。
代码
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){//相除法求最大公因数
while(b!=0)
{
int t=b;
b=a%b;
a=t;
}
return a;
}
int main(){
int a,b;
cin>>a>>b;
cout<<a*b/gcd(a,b);//最小公倍数公式为:abs(a*b)/a和b的最大公因数
return 0;
}
T4
题目描述
给一个字符串,把它正打印再反打印
思路分析
本题考查的语法是:字符串
原来的和反转后的拼接,就是把它正打印再反打印,所以可以按下面的代码做
代码
#include<bits/stdc++.h>
using namespace std;
char s[1010];
int main(){
cin>>s;
int n=strlen(s);//取s的长度
for(int i=0;i<n;i++)//正着打印
{
cout<<s[i];
}
for(int i=n-1;i>=0;i--)//反着打印
{
cout<<s[i];
}
return 0;
}
T6
题目描述
给一个的二维数组,一开始所有的数都是,后面会被改变。每一个数对应一个值,那个值是几,它的上下左右会被改变几次。改变规则:1到0,0到1。输入每一个数对应的值,输出改变后的数组
思路分析
本题考查的语法是:循环嵌套,模拟
不管顺序,每个数的改变次数都是一样的,所以可以直接从第一个格子到最后一个为顺序。如果那个值为2和2的倍数,它相当于没有变化,所以我们只需要处理的数。这样最多9次,不会超时。
代码
#include<bits/stdc++.h>
using namespace std;
int a[10][10];
int b[10][10];
int main(){
for(int i=0;i<3;i++)//全部设为1
{
for(int j=0;j<3;j++)
{
b[i][j]=1;
}
}
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
cin>>a[i][j];//输入
if(a[i][j]%2==1)
{
if(b[i][j]==1) b[i][j]=0;//自己
else b[i][j]=1;
if(i+1<3)//上
{
if(b[i+1][j]==1) b[i+1][j]=0;
else b[i+1][j]=1;
}
if(i-1>=0)//下
{
if(b[i-1][j]==1) b[i-1][j]=0;
else b[i-1][j]=1;
}
if(j+1<3)//右
{
if(b[i][j+1]==1) b[i][j+1]=0;
else b[i][j+1]=1;
}
if(j-1<3)//左
{
if(b[i][j-1]==1) b[i][j-1]=0;
else b[i][j-1]=1;
}
}
}
}
for(int i=0;i<3;i++)//输出
{
for(int j=0;j<3;j++)
{
cout<<b[i][j];
}
cout<<endl;
}
return 0;
}
给个周边吧,球球惹
全部评论 2
禁言7天的周边奖励满意吗(
5天前 来自 广东
014小时前 来自 北京
0不知道 至少你的时间是对的上的
13小时前 来自 广东
0
还没结束咋就发题解了?
5天前 来自 广东
0这样好像是会被禁言的
5天前 来自 广东
0
有帮助,赞一个