以下只是一个小白不成熟的想法,欢迎大家指正
这道题目我原来是这么想的,注意一定要把字符串变成数字后再做取余操作
#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;
}
我们需要注意换行只需要交换这一行的所有元素,一维就行 ,换列 ,只需要交换这个位置,要用二维 ,还有两题会在下次发出