1.题目:判断牛牛现在的方向?出门时面向北方
输入:转方向的次数N,
长度为N的字符串,由L,R组成,L表示左转,R表示右转;
输出: 此时面朝的方向
分析:统计R,L的数量,相减后,取4的余数,即往那个方向转的次数
(一次R,一次L,相当于没转,4次R或L也相当于没转)
#include<bits/stdc++.h> using namespace std; int main() { int n; while(cin>>n) { char a[n]; int Lnum=0,Rnum=0; for(int i=0;i<n;i++) { cin>>a[i]; if(a[i]=='L') Lnum++; else Rnum++; } int temp=0; if(Lnum>Rnum) { temp=(Lnum-Rnum)%4; switch(temp){ case 1:cout<<'W'<<endl; break; case 2:cout<<'S'<<endl; break; case 3:cout<<'E'<<endl; break; default:cout<<'N'<<endl; } } else if(Lnum<Rnum) { temp=(Rnum-Lnum)%4; switch(temp){ case 1:cout<<'E'<<endl; break; case 2:cout<<'S'<<endl; break; case 3:cout<<'W'<<endl; break; default:cout<<'N'<<endl; } } else cout<<'N'<<endl; } return 0; }
2.题目:x,y均不大于n,并且x除以y的余数大于等于k ,求满足可能的数对数量(x,y)
输入:n,k;
输出:满足可能的数对数量
分析:x%y>=k --> y>k&&x>=k
问题:通过10%,算法复杂度有问题(坐等大牛给出优秀的算法)
#include<bits/stdc++.h> using namespace std; int main() { int n,k; while(cin>>n>>k) { int num=0; for(int i=k;i<=n;i++) { for(int j=k;j<=n;j++) { if(i%j>=k) num++; } } cout<<num<<endl; } return 0; }
3.题目:神奇数列 :1,12,123,1234,12345,123456,1234567...,求从数列l~r有多少个能被3整除;
输入:l,r
输出:数列l~r区间内,能被3整除的个数
分析:各个数位的和是3的倍数的话,即该数能被3整除;
后面出现10,11的增加,相当于加0,加1,故取3的余数来解决该问题
#include<bits/stdc++.h> using namespace std; int main(){ int i,j; while(cin>>i>>j) { int num=0,remain=0; for(int k=1;k<=i;k++) { remain+=k%3; } for(int k=i;k<=j;k++) { remain+=k%3; if(remain%3==0) num++; } cout<< num <<endl; } return 0; }