天梯赛--练习集 打印沙漏
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n;
char c;
cin>>n>>c;
int cnt=1;n=n-1;
while(n){
if(n-(2*(cnt+1)-1)*2>=0){
n-=(2*(cnt+1)-1)*2;
cnt++;
}
else{
break;
}
}
int l=0,r=2*cnt-1;
int num=2*cnt-1;
for(int i=0;i<num;i+=2){
for(int j=0;j<num;j++){
if(j>=l&&j<r) cout<<c;
else if(j>=r) break;
else cout<<" ";
}
cout<<endl;
l++;
r--;
}
l-=2,r+=2;
for(int i=0;i<num-2;i+=2){
for(int j=0;j<num;j++){
if(j>=l&&j<r) cout<<c;
else if(j>=r) break;
else cout<<" ";
}cout<<endl;
l--,r++;
}
cout<<n<<endl;
return 0;
}
个位数统计
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[11];
int main(){
string s;
cin>>s;
int len=s.size();
memset(a,0,sizeof(a));
for(int i=0;i<len;i++){
a[s[i]-'0']++;
}
for(int i=0;i<=9;i++){
if(a[i]!=0){
cout<<i<<":"<<a[i]<<endl;
}
}
return 0;
}
考试座位号
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
const int maxn=1e3+10;
map<int,string> mm;
int se[maxn];
int main(){
int n;
int a,b;
string s;
cin>>n;
for(int i=0;i<n;i++){
cin>>s>>a>>b;
se[a]=b;
mm[b]=s;
}
cin>>a;
for(int i=0;i<a;i++){
cin>>b;
cout<<mm[se[b]]<<" "<<se[b]<<endl;;
}
return 0;
}
连续因子
一直超时,后来发现2^31 在最后判断l+1得时候溢出超时了
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
int s=sqrt(n);
int flag=0;
int l=n,r=n;
for(int i=2;i<=s;i++){
int x=n;
if(x%i==0){
int tl=i;
int tr=i;
x/=i;
for(int j=i+1;j<=s;j++){
if(x%j==0){
tr=j;x/=j;
}
else break;
}
if(!flag){
flag=1;
l=tl;r=tr;
}
else if(r-l<tr-tl){
l=tl;r=tr;
}
}
}
cout<<r-l+1<<endl;
cout<<l;
for(long long i=1ll+l;i<=r;i++)
cout<<"*"<<i;
cout<<endl;
return 0;
}
N个数求和(这题有点麻烦,我先把整数求出来只能18,应该是负数得原因)
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){
return b?gcd(b,a%b):a;
}
int main(){
int n;
cin>>n;
ll num=0;
ll u,d,eu,ed,tmp;
scanf("%lld/%lld",&eu,&ed);
tmp=gcd(eu,ed);
eu/=tmp;ed/=tmp;
for(int i=1;i<n;i++){
scanf("%lld/%lld",&u,&d);
int lcm=d/gcd(d,ed)*ed;
eu=lcm/ed*eu+lcm/d*u;
ed=lcm;
tmp=gcd(eu,ed);
if(tmp)
eu/=tmp;ed/=tmp;
}
if(eu&&eu/ed==0) printf("%lld/%lld\n",eu,ed);
else if(eu%ed==0) printf("%lld\n",eu/ed);
else printf("%lld %lld/%lld\n",eu/ed,eu%ed,ed);
return 0;
}//