P2818:
今天刷的这道题看起来挺水实际却不简单
先说一下20分代码吧,只要看懂题这20分就是白送的:
#include <iostream>//头文件 using namespace std; int main() { long long int x,y;//定义 cin>>x>>y; if(y%x==0)//审题 cout<<x; else cout<<y%x;输出 return 0; }
但是20分不足以满足我的要求,于是就开始思考以为要高精(吓死本人了),后来发现了一个规律,以二位数举例
一个二位数%另一个数就是先把这个数的十位*10%哪一个模数,加上个位数%哪一个模数再把和模哪一个模数。比如说,
59%5=(5x10%5+9%5)%5=(0+4)%5=4%5=4
这个规律显然对三位数以及更大的数也好用,于是就得到了代码:
#include <bits/stdc++.h>//万能头文件 #define For for(int i=0;i<la;i++)//省一点长度(其实没啥意义) using namespace std;//常规 int s[1010]={0};//清不清零都无所谓 int main()//主函数 { string a;//用字符串读入 long r;//定义模数 cin>>r>>a;//输入 short la=a.length();//在前面定义可以省时间 long long ans=0;//一定要清零!!! For s[i]=a[i]-'0';//把字符转化为数,并存入数组 For ans=(ans*10+s[i])%r;//把前面计算的公式引进来 if(!ans)//注意审题(只要审了,就知道要怎么做) cout<<r; else cout<<ans;//直接输出即可 return 0;//华华丽丽的结束 }
希望对你有帮助,但切勿抄袭!
P1234:
这道题其实很水(虽然写的是普及,到我估计也就普及-。)
此题思路:判断他的上下左右是否为HEHEH(但需要枚举),并且要写两个左右一个,上下一个。
最后计数。
注意事项;
1,是A-3和B-3,否则会爆。
2,要清零
3,是CHAR型数组。
#include <bits/stdc++.h> //万能头文件 using namespace std; int main() { //主函数 int a,b,jsq=0;//清零 cin>>a>>b;//输入长宽 char q[5019][5019];//定义 for(int i=1;i<=a;i++)//两层循环 { for(int j=1;j<=b;j++) { cin>>q[i][j];//输入字符 } } for(int i=1;i<=a;i++)//两层循环 { for(int j=1;j<=b-3/*防止会爆*/;j++)//枚举字符的i-1 j,i-2 j和i+1 j,i+2 j,和他自己(i j) { if((q[i][j]=='h'&&q[i][j+1]=='e'&&q[i][j+2]=='h'&&q[i][j+3]=='e')||(q[i][j]=='e'&&q[i][j+1]=='h'&&q[i][j+2]=='e'&&q[i][j+3]=='h'))//判断是否为HEHEH { jsq++; //计数器加一 } } } for(int i=1;i<=a-3/*防止会爆*/;i++)//两层循环 { for(int j=1;j<=b;j++)//枚举字符的i j-1,i j+1,和 i j+2,i j-2和它本身(i j) { if((q[i][j]=='h'&&q[i+1][j]=='e'&&q[i+2][j]=='h'&&q[i+3][j]=='e')||(q[i][j]=='e'&&q[i+1][j]=='h'&&q[i+2][j]=='e'&&q[i+3][j]=='h'))//判断是否为HEHEH { jsq++; //计数器加一 } } } cout<<jsq;//输出 return 0;//结束 }
//珍惜账号,远离抄袭
//点个赞吧☺