L1-002 打印沙漏
细节:就是在 (i>j&&i+j<r+1) 这个区间里才有空格,然后就是 for 循环 for(r=1; ;r+=2) 条件不满足之后还会再+2;
#include<bits/stdc++.h> using namespace std; #define rep(i,j,k) for(int i=(int)j;i<=(int)k;i++) #define per(i,j,k) for(int i=(int)k;i>=(int)j;i--) #define pb push_back #define fi first #define se second typedef long long ll; typedef unsigned long long ull; typedef long double ldb; int main(){ int n; char c; scanf("%d %c",&n,&c); // int r=1,sum=1; // for(r=3;sum<=n ;r+=2){ // sum+=r*2; // } // sum-=r*2; // r-=2; int r=1,sum=0; for(r=1; ;r+=2){ if(r==1)sum+=r; else sum+=r<<1; if(sum>n)break; } sum-=r<<1; r-=2; // cout<<sum<<" "<<r<<endl; for(int i=1;i<=r;i++){ for(int j=1;j<=r;j++){ if(i<=j&&i+j<=r+1||i>=j&&i+j>=r+1)cout<<c; else if(i>j&&i+j<r+1) cout<<" "; } cout<<endl; } cout<<n-sum<<endl; return 0; }
L1-003
搞个map即可,然后注意map只能从first 映射到second
#include<bits/stdc++.h> using namespace std; #define rep(i,j,k) for(int i=(int)j;i<=(int)k;i++) #define per(i,j,k) for(int i=(int)k;i>=(int)j;i--) #define pb push_back #define fi first #define se second typedef long long ll; typedef unsigned long long ull; typedef long double ldb; int main(){ string s; cin>>s; map<int,int>mp; int len=s.size(); for(int i=0;i<len;i++){ mp[s[i]-'0']++; } map<int,int>::iterator it; for(it=mp.begin();it!=mp.end();it++){ cout<<it->fi<<":"<<it->se<<endl; } return 0; }
L1-006 连续因子
解法:就是你把他的全部因子求出来,然后去枚举每一个因子的最大连续次数,最后取一个最大值即可;
然后如果n是素数,输出n即可;
#include<bits/stdc++.h> using namespace std; #define rep(i,j,k) for(int i=(int)j;i<=(int)k;i++) #define per(i,j,k) for(int i=(int)k;i>=(int)j;i--) #define pb push_back #define fi first #define se second typedef long long ll; typedef unsigned long long ull; typedef long double ldb; int main(){ int n; cin>>n; vector<int>v; int ans,max=-1; for(int i=2;i<=sqrt(n)+1;i++){ if(n%i==0)v.pb(i); } int len=v.size(); for(int i=0;i<len;i++){ int sum=v[i],cnt=0; for(int j=v[i]+1; ;j++){ sum*=j; if(n%sum!=0)break; cnt++; } if(cnt>max){ ans=v[i]; max=cnt; } } if(len==0)cout<<1<<endl<<n<<endl; else { cout<<max+1<<endl; for(int i=0;i<=max;i++){ if(i)cout<<"*"; cout<<ans+i; } cout<<endl; } return 0; }
L1-008 求整数段和
细节,最后不要打出两个换行即可;
#include<bits/stdc++.h> using namespace std; #define rep(i,j,k) for(int i=(int)j;i<=(int)k;i++) #define per(i,j,k) for(int i=(int)k;i>=(int)j;i--) #define pb push_back #define fi first #define se second typedef long long ll; typedef unsigned long long ull; typedef long double ldb; int main(){ int a,b; cin>>a>>b; ll sum=0; int i,j; for(i=a,j=1;i<=b;j++,i++){ printf("%5d",i); sum+=i; if(j%5==0)printf("\n"); } if((j-1)%5!=0)printf("\n"); printf("Sum = %d",sum); // cout<<"Sum = "<<sum<<endl; return 0; }
未完待续;