软件学院25级萌新热身赛C++题解

#include<bits/stdc++.h>为万能头文件,包括所有头文件。

请大家根据题解与题号进行补题学习~


A 我爱敲代码 题号1909

输出签到题。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    cout<<"I love coding!";   
}

B 报数字说英文 题号1111

选择结构。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int x;
    cin>>x;
    if(x==1)
    cout<<"Mon";
    else if(x==2)
    cout<<"Tue";
    else if(x==3)
    cout<<"Wed";
    else if(x==4)
    cout<<"Thur";
    else if(x==5)
    cout<<"Fri";
    else if(x==6)
    cout<<"Sat";
    else
    cout<<"Sun"; 
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int x;
	cin>>x;
	switch (x) {
	case 1:
		cout<<"Mon";
		break;
	case 2:
		cout<<"Tue";
		break;
	case 3:
		cout<<"Wed";
		break;
	case 4:
		cout<<"Thur";
		break;
	case 5:
		cout<<"Fri";
		break;
	case 6:
		cout<<"Sat";
		break;
	default:
		cout<<"Sun";
		break;
	}
}

C 完全平方数 题号1457

循环判断。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int x;
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        int w=sqrt(x);//sqrt函数默认返回浮点数,所以转换成int类型进行判断
        if(x==w*w)
        ans++;
    }
    cout<<ans;
}

D 蛇形矩阵 题号1361

经典题目。

#include<bits/stdc++.h>
using namespace std;
int z[101][101];//二维数组存储矩阵
int main()
{
    int n,m;
    cin>>n>>m;
    int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
/*
    四个方向
    当d=0时dx[0]=0,dy[1]=1,当前坐标的x,y值分别加上dx[0],dy[0],y坐标加1,即向右移动。
    当d=1时dx[1]=1,dy[1]=0,当前坐标的x,y值分别加上dx[1],dy[1],x坐标加1,即向下移动。
    当d=2时dx[2]=0,dy[2]=-1,当前坐标的x,y值分别加上dx[2],dy[2],y坐标减1,即向左移动。
    当d=3时dx[3]=-1,dy[3]=0,当前坐标的x,y值分别加上dx[3],dy[3],x坐标减1,即向上移动。
*/
    for(int a=0,b=0,d=0,t=1;t<=n*m;t++)
    {
    //a,b即当前位置坐标(a,b),d=0表示初始向右移动,t用来给当前位置赋值。
        z[a][b]=t;
        int x=a+dx[d],y=b+dy[d];//下一位置坐标。
        if(x<0||x>=n||y<0||y>=m||z[x][y])
    //下一位置坐标如果在边界上或已经经过位置上则这一位置不合法,需要转方向,顺序为右下左上。
        {
            d=(d+1)%4;
    //当d加到4时让它回到0,即从向上运动转方向到向右运动。
            x=a+dx[d],y=b+dy[d];
    //下一位置坐标。
        }
        a=x;
        b=y;
    //从当前位置移动到下一位置。
    }
    for(int i=0;i<n;i++)
    {
       for(int j=0;j<m;j++)
       cout<<z[i][j]<<' ';
       cout<<endl;
    }
    //输出矩阵。
       return  0;
}

E 母牛问题 题号1163

根据提示上给出的计算公式,预处理答案。

再通过while多样例输入,直接输出答案。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[44];
	a[1]=1,a[2]=1,a[3]=1;
	for(int i=4;i<=40;i++)
		a[i]=a[i-1]+a[i-3];
    int n;
	while(cin>>n)//多样例输入 与while(scanf("%d",&n)!=EOF)等效
		cout<<a[n]<<endl;
}

F 跳远游戏 题号1360

暴力循环会时间超限。

n是奇数时,向右跳(n-1)/2+1次,向左跳(n-1)/2次。

n是偶数时,向左向右均跳n/2次。

#include<bits/stdc++.h>
using namespace std;
#define int long long//将int宏定义为long long。下面的所有int都会被识别为long long。
signed main()//main主函数的返回值必须是int,所以进行上一步后需将主函数的返回值int换成signed,
//int是signed int的简写,signed也是signed int的简写,即int与signed等价,通过这种方式规避宏定义。
{
	int t;
	cin>>t;
	while(t--)
	{
		int x,y,n;
		int s;//宏定义
		cin>>x>>y>>n;
		if(n&1)//与n%2==0等效
			s=(n/2)*(x-y)+x;//n是奇数时,(int)n/2与(n-1)/2相等
		else
			s=n/2*(x-y);
		cout<<s<<endl;
	}
} 

G Spike_Q的好01串 题号1910

简单思维题,无论字符串长度是多少,好01串只有0开头和1开头的两种。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    cout<<2;
}

H 总分第一 题号1204

结构体的考察,当然不用结构体也行。

无结构体版。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int mmax=0;
    string ans1,ans2;
    int ch,ma,en;
    while(n--)
    {
        string id,name;
        int a,b,c;
        cin>>id>>name>>a>>b>>c;
        int d=a+b+c;
        if(d>mmax)
        {
            mmax=d;
            ans1=id,ans2=name;
            ch=a,ma=b,en=c;
        }
    }
    cout<<ans1<<" "<<ans2<<" "<<ch<<" "<<ma<<" "<<en;
}

结构体版

#include<bits/stdc++.h>
using namespace std;
struct xuesheng{
	string id;
	string name;
	int ch,ma,en;
}s[111];
int main()
{
	int n;
	int z[111];
	int mmax=0,maxi;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>s[i].id>>s[i].name>>s[i].ch>>s[i].ma>>s[i].en;
		z[i]=s[i].ch+s[i].ma+s[i].en;
		if(z[i]>mmax)
		{
			mmax=z[i];
			maxi=i;
		}
	}
	cout<<s[maxi].id<<" "<<s[maxi].name<<" "<<s[maxi].ch<<" "<<s[maxi].ma<<" "<<s[maxi].en;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值