7-1 N个数求和
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,x,y,fz[200],fm[200],m=1,fzsum;
bool flag=false;
ll lcm(ll a,ll b){
return a*b/__gcd(a,b);
}
int main(){
cin>>n;
for(int i=0;i<n;++i)
{
scanf("%lld/%lld",&x,&y);
if(y<0){
x=-x;y=-y;
}
fz[i]=x;
fm[i]=y;
m=lcm(m,y);
}
for(int i=0;i<n;++i)
{
fz[i]=m/fm[i]*fz[i];
fzsum+=fz[i];
}
if(fzsum<0){
flag=true;
fzsum=-fzsum;
}
ll t=__gcd(fzsum,m);
fzsum/=t;
m/=t;
if(fzsum<m){
if(fzsum==0)cout<<"0";
else
{
if(flag)cout<<"-";
printf("%lld/%lld",fzsum,m);
}
}
else {
x=fzsum/m;
y=fzsum%m;
if(y==0){
if(flag)cout<<"-";
printf("%lld",x);
}
else {
if(flag){
printf("%lld %lld/%lld",-x,-y,m);
}
else printf("%lld %lld/%lld",x,y,m);
}
}
return 0;
}
7-2 A-B
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string a,b;
int main(){
getline(cin,a);
getline(cin,b);
for(int i=0;i<b.size();++i)
{
while(a.find(b[i])!=a.npos)
{
a=a.erase(a.find(b[i]),1);
}
}
cout<<a;
return 0;
}
7-3 帅到没朋友
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5;
int n,k,x,m;
bool st[N],one,no=true,first=true;
int main(){
cin>>n;
for(int i=0;i<n;++i)
{
cin>>k;
if(k==1)one=true;
else one=false;
while(k--)
{
cin>>x;
if(!one)st[x]=true;
}
}
cin>>m;
while(m--)
{
cin>>x;
if(st[x]==false){
st[x]=true;
if(first){
printf("%05d",x);
first=false;
}
else
printf(" %05d",x);
no=false;
}
}
if(no)cout<<"No one is handsome";
return 0;
}
7-4 输出GPLT
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string s;
int g,p,l,t,cnt;
int main(){
cin>>s;
for(int i=0;i<s.size();++i)
{
char c=tolower(s[i]);
if(c=='g')g++;
if(c=='p')p++;
if(c=='l')l++;
if(c=='t')t++;
}
cnt=g+p+l+t;
while(cnt)
{
if(g){
cout<<'G';
g--,cnt--;
}
if(p){
cout<<'P';
p--,cnt--;
}
if(l){
cout<<'L';
l--,cnt--;
}
if(t){
cout<<'T';
t--,cnt--;
}
}
return 0;
}
7-5 出租
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string s;
int a[100];
char arr[100];
int idx[100],p;
int main(){
cin>>s;
for(int i=0;i<s.size();++i)
{
a[s[i]-'0']++;
}
for(int i=9;i>=0;--i)
{
if(a[i])arr[p++]=i+'0';
}
for(int i=0;i<s.size();++i)
{
for(int j=0;j<p;++j)
{
if(s[i]==arr[j]){
idx[i]=j;
break;
}
}
}
printf("int[] arr = new int[]{%c",arr[0]);
for(int i=1;i<p;++i)
{
cout<<","<<arr[i];
}
cout<<"};"<<endl;
printf("int[] index = new int[]{%d",idx[0]);
for(int i=1;i<s.size();++i)
{
cout<<","<<idx[i];
}
cout<<"};";
return 0;
}
7-6 Left-pad
#include<bits/stdc++.h>
using namespace std;
int n,len;
char c;
string s;
int main()
{
cin>>n>>c;getchar();
getline(cin,s);
len=s.size();
if(n>len){
s=s.insert(0,n-len,c);
}
else {
//s=s.substr(len-n,n);
s.erase(0,len-n);
}
cout<<s;
return 0;
}
7-7 古风排版
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。
输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
#include<bits/stdc++.h>
using namespace std;
int n,len,r,c;
string s;
int main()
{
cin>>n;getchar();
getline(cin,s);
len=s.size();
if(len%n==0){
c=len/n;
}else {
c=(len+n)/n;
}
for(int i=0;i<n;++i)
{
for(int j=0;j<c;++j)
{
int t=(c-1-j)*n+i;
if(t<len)cout<<s[t];
else cout<<" ";
}
if(i!=n-1)cout<<endl;
}
return 0;
}
7-8 阅览室
出题谜语人:输出平均时间不是上取整也不是下取整,而是四舍五入
#include<bits/stdc++.h>
using namespace std;
int n,id,t,a[1005],b[1005],sum,cnt;
string s;char c;
int gettime()
{
int a,b;
scanf("%d:%d",&a,&b);
return a*60+b;
}
int main()
{
cin>>n;
while(n)
{
cin>>id>>c;
t=gettime();
if(id==0){
if(cnt==0)cout<<"0 0"<<endl;
else cout<<cnt<<" "<<(int)((sum*1.0)/cnt+0.5)<<endl;
memset(b,0,sizeof b);
sum=cnt=0;
n--;
continue;
}
if(b[id]=='S'&&c=='E'){
cnt++;
if(t>=a[id])sum+=t-a[id];
}
a[id]=t;
b[id]=c;
}
return 0;
}
7-9 整除光棍
java比较直观
cpp
#include<bits/stdc++.h>
using namespace std;
int x,ans;
bool flag;
int main()
{
cin>>x;
for(int i=1;;i++){
ans=ans*10+1;
if(ans>=x){
flag=true;
cout<<ans/x;
}else if(flag)cout<<ans/x;
ans%=x;
if(ans==0){
cout<<" "<<i;
break;
}
}
return 0;
}
java
import java.math.BigInteger;
import java.util.*;
public class Main
{
static BigInteger b(int x)
{
return BigInteger.valueOf(x);
}
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
BigInteger x=sc.nextBigInteger();
BigInteger ans=b(0);
for(int i=1;;++i)
{
ans=ans.multiply(b(10));
ans=ans.add(b(1));
if(ans.mod(x).intValue()==0){
System.out.print(ans.divide(x));
System.out.println(" "+i);
return;
}
}
}
}
7-10 天梯赛座位分配
#include <bits/stdc++.h>
using namespace std;
queue<int> q[105];
int m[105],cnt,ma,mq,last;
int main()
{
int n;cin>>n;
for(int i=1;i<=n;++i)
{
cin>>m[i];
if(m[i]>=ma)
{
ma=m[i];mq=i;
}
}
while(1)
{
for(int i=1;i<=n;++i)
{
if(q[i].size()==m[i]*10)continue;
if(last==i)cnt+=2;
else cnt++;
q[i].push(cnt);
last=i;
}
if(q[mq].size()==ma*10)break;
}
for(int i=1;i<=n;++i)
{
cout<<"#"<<i<<endl;
int t=q[i].size();
for(int j=0;j<t;++j)
{
if(j%10!=9)
cout<<q[i].front()<<" ";
else cout<<q[i].front()<<endl;
q[i].pop();
}
}
return 0;
}
7-11 前世档案
#include<bits/stdc++.h>
using namespace std;
int n,m;
char c;
int main()
{
cin>>n>>m;
while(m--)
{
int ans=0;
for(int i=0;i<n;++i)
{
cin>>c;
ans*=2;
if(c=='n')ans+=1;
}
cout<<ans+1<<endl;
}
return 0;
}
7-12 刮刮彩票
#include<bits/stdc++.h>
using namespace std;
int a[4][4],b[4][4],x,y,t,ans;
bool st[20];
int main()
{
for(int i=1;i<=3;++i)
{
for(int j=1;j<=3;++j)
{
cin>>t;st[t]=true;
a[i][j]=t;
if(t==0)x=i,y=j;
}
}
for(int i=1;i<=9;++i)
{
if(st[i]==false)b[x][y]=a[x][y]=i;
}
for(int i=0;i<3;++i)
{
cin>>x>>y;
b[x][y]=a[x][y];
cout<<b[x][y]<<endl;
}
cin>>t;
switch (t)
{
case 1:
case 2:
case 3:
for(int i=1;i<=3;++i)ans+=a[t][i];
break;
case 4:
case 5:
case 6:
for(int i=1;i<=3;++i)ans+=a[i][t-3];
break;
case 7:
for(int i=1;i<=3;++i)ans+=a[i][i];
break;
case 8:
for(int i=1;i<=3;++i)ans+=a[i][4-i];
break;
}
switch(ans)
{
case 6:cout<<10000;break;
case 7:cout<<36;break;
case 8:cout<<720;break;
case 9:cout<<360;break;
case 10:cout<<80;break;
case 11:cout<<252;break;
case 12:cout<<108;break;
case 13:cout<<72;break;
case 14:cout<<54;break;
case 15:cout<<180;break;
case 16:cout<<72;break;
case 17:cout<<180;break;
case 18:cout<<119;break;
case 19:cout<<36;break;
case 20:cout<<306;break;
case 21:cout<<1080;break;
case 22:cout<<144;break;
case 23:cout<<1800;break;
case 24:cout<<3600;break;
}
return 0;
}
7-14 敲笨钟
#include<bits/stdc++.h>
using namespace std;
int n;
string a[100];
bool check(string s)
{
int len=s.size();
if(len<4)return false;
s=s.substr(len-4,3);
if(s=="ong")return true;
return false;
}
int main()
{
cin>>n;
while(n--)
{
int p=0,l,r;
while(1)
{
cin>>a[p++];
int len=a[p-1].length();
if(a[p-1][len-1]==','){
l=p-1;
}
if(a[p-1][len-1]=='.') {
r=p-1;break;
}
}
if(check(a[l])&&check(a[r]))
{
a[r-2]="qiao";
a[r-1]="ben";
a[r]="zhong.";
for(int i=0;i<=r;i++){
if(i!=r)
cout<<a[i]<<" ";
else cout<<a[i]<<endl;
}
}
else cout<<"Skipped"<<endl;
}
return 0;
}
7-15 猜数字
#include<bits/stdc++.h>
using namespace std;
int n;
map<string, double> mp;
double t,ans,d=10000;
string s;
int main()
{
cin>>n;
for(int i=0;i<n;++i)
{
cin>>s>>t;
ans+=t;
mp[s]=t;
}
ans/=(n*2);
map<string, double>::iterator it;
for(it=mp.begin();it!=mp.end();++it)
{
t=fabs(it->second-ans);
if(t<d){
d=t;
s=it->first;
}
}
cout<<floor(ans)<<" "<<s;
return 0;
}