团队设计天梯赛L1坑点题目总结
前言
刷不动题了,就把这两天刷的有坑点的题目总结下吧
L1-006 连续因子
坑点:要考虑有素数存在的情况
view code
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;cin>>n;
int mlen=0;
int start=0;
for(int i=2;i<=sqrt(n);i++){
if(n%i!=0) continue;
int temp=n;
int x=i;
int len=0;
while(temp%x==0){
temp/=x;
x++;
len++;
}
if(mlen<len){
mlen=len;
start=i;
}
}
if(!mlen){
printf("%d\n%d",1,n); return 0;
}
cout<<mlen<<endl;
for(int i=0;i<mlen;i++){
if(i!=0)cout<<"*";
cout<<start++;
}
return 0;
}
L1-019 谁先倒
甲乙同时赢或者同时输不喝酒
view code
#include <bits/stdc++.h>
using namespace std;
string s;
int main()
{
int maxa,maxb;
cin>>maxa>>maxb;
int n; cin>>n;
int numa=0,numb=0;
for(int i=0;i<n;i++){
int a1,a2,b1,b2;
cin>>a1>>a2>>b1>>b2;
if(a1+b1==a2&&a2!=b2)
numa++;
if(a1+b1==b2&&a2!=b2)
numb++;
if(numa>maxa){
cout<<"A\n";
cout<<numb; break;
}
if(numb>maxb){
cout<<"B\n";
cout<<numa;
break;
}
}
return 0;
}
L1-033 出生年
坑点:年龄不能太大,否则就会有个测试点不过
view code
#include <bits/stdc++.h>
using namespace std;
int main()
{
int y,n; cin>>y>>n;
set<int> s;
for(int i=y;i<=y+150;i++){ //就是这里,不能i<3000,小于个一百多就行了
if(i<1000)s.insert(0);
int x=i;
while(x>0){
s.insert(x%10);
x/=10;
}
if(s.size()==n){
printf("%d %04d",i-y,i);break;
}
s.clear();
}
return 0;
}
L1-039 古风排版
这题没什么坑点,不过挺有意思的,记录一下
view code
#include <bits/stdc++.h>
using namespace std;
char a[105][105];
int main()
{
int n; cin>>n; getchar();
string s;
getline(cin,s);
int len=s.size();
int m=len/n;
if(len%n!=0) m++;
int tot=0;
for(int i=m-1;i>=0;i--){
for(int j=0;j<n;j++){
if(tot<len){
a[j][i]=s[tot++];
}
else a[j][i]=' ';
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++){
cout<<a[i][j];
}
cout<<endl;
}
return 0;
}
L1-043 阅览室
坑点:第一天借的书如果当天没有还,在第二天或者以后再还是按一天的时间来算。真坑,题目设计有问题。
view code
#include <bits/stdc++.h>
using namespace std;
int s[1005],vis[1005];
int ans1[1005],ans2[1005];
int main()
{
int n;
cin>>n;
int cnt=0;
double sum=0;
int person=0;
while(cnt<n){
char c; int x,hh,mm;
scanf("%d %c %d:%d",&x,&c,&hh,&mm);
if(x==0){
ans1[cnt]=person;
if(person!=0)
ans2[cnt]=sum/person+0.5;
person=0; sum=0;
cout<<ans1[cnt]<<" "<<ans2[cnt]<<endl;
cnt++;
continue;
}
if(c=='S'){ s[x]=hh*60+mm;vis[x]=1;}
else if(c=='E'){
if(vis[x]){
sum+=hh*60+mm-s[x];
person++;
vis[x]=0; //这里得手动置零,因为有可能出现第一天借的书没有还,到了第二天,第三天才还,
//很坑的是,即使是到了第二天第三天去还,阅读时间还是按一天的来算。
}
}
}
return 0;
}
L1-046 整除光棍
记录一下,这种模拟除法的方法还是第一次见
view code
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x;cin>>x;
int s=1;
int n=0;
while(x>s){
s=s*10+1;
n++;
}
while(1){
cout<<s/x;
if(s%x==0){ n++; break;}
s%=x;
s=s*10+1;
n++;
}
cout<<" "<<n;
return 0;
}
L1-048 矩阵A乘以B
线线代?
view code
#include <bits/stdc++.h>
using namespace std;
int n,m,n1,n2,m1,m2;
int a[105][105],b[105][105];
int main()
{
cin>>n1>>m1;
for(int i=0;i<n1;i++)
for(int j=0;j<m1;j++)
cin>>a[i][j];
cin>>n2>>m2;
for(int i=0;i<n2;i++)
for(int j=0;j<m2;j++)
cin>>b[i][j];
if(m1!=n2){ printf("Error: %d != %d",m1,n2); return 0;}
cout<<n1<<" "<<m2<<endl;
for(int n=0;n<n1;n++){
for(int m=0;m<m2;m++){
int x=0;
for(int i=0;i<m1;i++){
x+=a[n][i]*b[i][m];
}
if(m==m2-1)cout<<x;
else
cout<<x<<" ";
}
if(n!=n1-1)
cout<<endl;
}
return 0;
}
L1-049 天梯赛座位分配
开一个vector二维数组,模拟向里面填数
view code
#include <bits/stdc++.h>
using namespace std;
vector <int> a[105];
int b[105];
int vis[105];
int n;
int main()
{
cin>>n;
int tot=1;
for(int i=1;i<=n;i++) cin>>b[i];
int m=n;
while(m>0){
for(int i=1;i<=n;i++){
if(vis[i]) continue;
if(m==1){a[i].push_back(tot);tot+=2;}
else{
a[i].push_back(tot++);
}
if(a[i].size()==b[i]*10) {vis[i]=1; m--;}
}
}
for(int j=1;j<=n;j++){
int cnt=0;
cout<<"#"<<j<<endl;
for(int i:a[j]){
cnt++;
if(cnt==10)
cout<<i<<"\n",cnt=0;
else
cout<<i<<" ";
}
}
return 0;
}
L1-050 倒数第N个字符串
我怎么就想不到呢,长度为n的串,每一位是先b%n,b/=n;
view code
#include <bits/stdc++.h>
using namespace std;
void dfs(int a,int b){
if(a>1) dfs(a-1,b/26);
cout<<char('z'-(b%26));
}
int main()
{
int n,l;
cin>>n>>l;
dfs(n,l-1);
return 0;
}
L1-054 福到了
练习了下reverse(s.begin(),s.end())的使用,还有 replace(s.begin(),s.end(),"要替换的字符","替换成啥字符")
view code
#includeusing namespace std;
string s[105];
int main()
{
char o=getchar();
int n;cin>>n;
int mid=n/2+1;
if(n%2==0)mid=n/2;
int flag=0;
getchar();
for(int i=1;i<=n;i++){
getline(cin,s[i]);
if(i>mid){
string res(s[i]);
reverse(res.begin(),res.end());
if(s[2*mid-i].compare(res)!=0){
flag=1;
}
}
}
if(!flag)
cout<<"bu yong dao le\n";
for(int i=n;i>=0;i--){
reverse(s[i].begin(),s[i].end());
replace(s[i].begin(),s[i].end(),'@',o);
cout<<s[i];
if(i>0)
cout<<endl;
}
return 0;
}

浙公网安备 33010602011771号