【LGR-187-Div.4】洛谷入门赛 #23

以下只是一个小白不成熟的想法,欢迎大家指正



这道题目我原来是这么想的,注意一定要把字符串变成数字后再做取余操作

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int x,k;
	cin>>x>>k;
	string s=to_string(x);
	for(int i=0;i<s.size();i++)
    {
	    int digit = s[i] - '0'; 
        s[i] = (digit % k) + '0';
		//先将字符转换为对应的数字,然后再进行取余操作 
	} 
	cout<<s;
	return 0;
}

可是我之后发现了问题,如果是7070 7,就会出现0000,那么我们应该怎么去除这些前导0呢

	int p=0;
	while(p<s.size()&&s[p]=='0')
	p++; 
	if(p==s.size())
	cout<<"0";//如果结果全为零,则输出单个零
	else
	{
		for(int j=p;j<s.size();j++)
		cout<<s[j];// 输出零及其后的所有数字
	}

所以我增加了这个,目的是删除前导0,如果是0那就一直加下去,看他能不能加到他的长度,如果加到输出0,如果加不到,那么就输出零及后面的数字



#include<iostream>
using namespace std;
int main()
{
	int y;
	cin>>y;
	if((y%4!=0)||(y%100==0&&y%400!=0)||(y%3200==0&&y%172800!=0))
	cout<<"No";
	if((y%4==0&&y%400!=0)||(y%400==0&&y%3200!=0)||(y%172800==0))
	cout<<"Yes";
	return 0;
}

我一开始是这样做的,但是当我输入显然是错误的


通过将第二个if语句改为else if,可以确保只有在第一个条件不满足时才会检查第二个条件。这样,程序就能正确地输出对应的结果。使用else if构成的条件链,确保了在满足一个条件时就结束判断,而不会继续向下执行其他条件。万一有的是第一个条件满足第二个也满足

#include<iostream>
using namespace std;
int main()
{
	int y;
	cin>>y;
	if((y%4!=0)||(y%100==0&&y%400!=0)||(y%3200==0&&y%172800!=0))
	cout<<"No";
	else if((y%4==0&&y%400!=0)||(y%400==0&&y%3200!=0)||(y%172800==0))
	cout<<"Yes";
	return 0;
}

所以我把 上面那个if改成else if



#include<iostream>
using namespace std;
int main()
{
	int x;
	cin>>x;
	while(x!=0)
	{
		cout<<x/2<<" "<<x%2<<endl;
		x=x/2;
	}
	return 0; 
}

这道题目没什么好说的,我们看下面一道



#include<iostream>
using namespace std;
const int N = 1e6 + 10;
int S[N], Q[N];
int main() {
    int cnts = 0, cntq = 0;
    int n;
    cin >> n;
    for(int i = 0; i < n; i++)
        cin >> S[i] ;
        for(int i = 0; i < n; i++)
        cin >> Q[i] ;
         for(int i = 0; i < n; i++)
         {
        if(S[i] > Q[i])
            cnts++;
        else if(Q[i] > S[i])
            cntq++;
    }
    cout << cnts << " " << cntq << endl;
    if(cnts > cntq)
        cout << "S";
    else if(cntq > cnts)
        cout << "Q";
    else
        cout << "Tie";
    return 0;
}

这个就是一个一个比较,但是时间复杂度很高,我想着能不能优化一下他的时间复杂度,但是目前我还没想出来,大家要是有什么更好的方法可以告诉我


不妨从反面思考,把他们是大写和小写的存起来,那么那些符号什么的自然就删除了


#include<iostream>
using namespace std;
int main()
{
	string s;
	cin>>s;
	string result;
	for(int i=0;i<s.size();i++)
	{
		if((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z'))
		result+=s[i];
	}
	cout<<result;
	return 0;//遍历其中的每个字符。如果字符是大小写字母,
	//则将其加入到结果字


这个题目就是交换,那我们直接上代码


#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e3+10;
int a[N][N];
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		cin>>a[i][j];
	}
	while(m--)
	{
		int op,x,y;
		cin>>op>>x>>y;
	if(op==1)
	swap(a[x],a[y]);//换行只需要交换这一行的所有元素,一维就行 
	else if(op==0)
	{
	for(int i=1;i<=n;i++)
	swap(a[i][x],a[i][y]);//换列 ,只需要交换这个位置,要用二维 
}
}
    for(int i=1;i<=n;i++)
    {
    	for(int j=1;j<=n;j++)
    	cout<<a[i][j]<<" ";	
		cout<<endl;
	}
    return 0;
}

我们需要注意换行只需要交换这一行的所有元素,一维就行 ,换列 ,只需要交换这个位置,要用二维 ,还有两题会在下次发出

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何舟yancy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值