算法(期中)

254: 翻煎饼

#include<bits/stdc++.h>
using namespace std;
int n,sum=0,a[1000];
int main()
{
	cin>>n;
	for(int i=0;i<n;i++) cin>>a[i];
	while(n>1)
	{
		int maxn=0;
		for(int i=0;i<n;i++)
			if(a[i]>=a[maxn]) maxn=i;
		if(maxn==0)
		{
			sum+=1;
			reverse(a,a+n);
		}
		else if(maxn!=n-1)
		{
			sum+=2;
			reverse(a,a+maxn+1);
			reverse(a,a+n);
		}
		n--;
	}
	cout<<sum<<endl;
}

348: 花生采摘

#include <bits/stdc++.h>
using namespace std;
int m,n,k,MaxNum=0,a[25][25];
void Func(int x,int y,int TimeLimit)
{
    int Max=-0x3f3f3f3f,X_max,Y_max,NeedTime;
    for(int i=1;i<=m;i++)
        for(int j=1;j<=n;j++)
            if(a[i][j]>Max)
            {
                Max=a[i][j];
                X_max=i;
                Y_max=j;
            }
    if(y==0) NeedTime=abs(X_max-x)+1;
    else NeedTime=abs(X_max-x)+abs(Y_max-y)+1;
    if((NeedTime+X_max)>TimeLimit||a[X_max][Y_max]==0) return;
    else
    {
        MaxNum+=a[X_max][Y_max]; 
        a[X_max][Y_max]=0;
        Func(X_max,Y_max,TimeLimit-NeedTime);
    }
}
int main()
{
    cin>>m>>n>>k;
    for(int i=1;i<=m;i++)
        for(int j=1;j<=n;j++) cin>>a[i][j];
    Func(0,0,k);
    cout<<MaxNum<<endl;
    return 0;
}

480: Locker doors

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;cin>>n;
	cout<<(int)sqrt(n)<<endl;
}

536: The Josephus Problem

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,f=0;
    cin>>n;
    for(int i=1;i<=n;i++) f=(f+2)%i; 
    cout<<f+1<<endl;
}

541: 排列的字典序问题

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,sum=0;
	cin>>n;
	int a[n],b[n]={0};
	for(int i=0;i<n;i++) cin>>a[i];
	for(int i=0;i<n;i++)
		for(int j=i+1;j<n;j++)
			if(a[i]>a[j]) b[i]++;
	for(int i=0;i<n;i++)
	{
		int res=b[i];
		for(int j=1;j<=n-1-i;j++) res*=j;
		sum+=res;
	}
	cout<<sum<<endl;
	int left,right;
	for(int i=n-1;i>=0;i--)
		if(a[i-1]<a[i])
		{
			left=i-1;
			break;
		}
	for(int i=n-1;i>=0;i--)
		if(a[i]>a[left])
		{
			right=i;
			break;
		}
	swap(a[left],a[right]);
	for(int i=left+1;i<n;i++)
		for(int j=i+1;j<n;j++)
			if(a[i]>a[j]) swap(a[i],a[j]);
	for(int i=0;i<n;i++) cout<<a[i]<<" ";
	cout<<endl;
	return 0;
}

342: 变位词

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    char a[100],b[100];
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a>>b;
        int la=strlen(a);
        int lb=strlen(b);
        int flag=0;
        int c[26]={0},d[26]={0};
        if(la!=lb) cout<<"No"<<endl;
        else
        {
            for(int j=0;j<la;j++)
            {
                c[a[j]-'a']++;
                d[b[j]-'a']++;
            }
            for(int k=0;k<26;k++)
                if(c[k]!=d[k]) flag++;
            if(flag>0) cout<<"No"<<endl;
            else cout<<"Yes"<<endl;
        }
    }
    return 0;
}

413: Quick Sort

#include<bits/stdc++.h>
using namespace std;
void quicksort(int left,int right,int *arr)
{
    if(left>=right) return;
    int i,j,t;
    i=left;
    j=right;
    t=arr[left];
    while(i<j)
    {
        while(i<j&&arr[j]>=t) j--;
        arr[i]=arr[j];
        while(i<j&&arr[i]<=t) i++;
        arr[j]=arr[i];
    }
    arr[i]=t;
    quicksort(left,i,arr);
    quicksort(i+1,right,arr);
}
int main()
{
    int n;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++) cin>>a[i];
    quicksort(0,n-1,a);
    for(int i=0;i<n;i++) cout<<a[i]<<' ';
    cout<<endl;
    return 0;
}

446: 合并排序

#include<bits/stdc++.h>
using namespace std;
void merge(int *a,int left,int mid,int right,int *temp)
{
    int i=left;
    int j=mid+1;
    int t=0;
    while(i<=mid&&j<=right)
    {
        if(a[i]<=a[j]) temp[t++]=a[i++];
        else temp[t++]=a[j++];
    }
    while(i<=mid) temp[t++]=a[i++];
    while(j<=right) temp[t++]=a[j++];
    for(i=0;i<t;i++) a[left+i]=temp[i];
}
void merge_sort(int *temp,int *a,int left,int right)
{
    if(left<right)
    {
        int mid=left+(right-left)/2;
        merge_sort(temp,a,left,mid);
        merge_sort(temp,a,mid+1,right);
        merge(a,left,mid,right,temp);
    }
}
int main()
{
    int n;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++) cin>>a[i];
    int temp[1000]={0};
    merge_sort(temp,a,0,n-1);
    for(int i=0;i<n;i++)
    {
        if((i+1)%10==0||i==n-1) cout<<a[i]<<endl;
        else cout<<a[i]<<"  ";//两个空格
    }
    return 0;
}

493: PostOffice

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int x[10000],y[10000];
    int n,sum=0;
    cin>>n;
    for(int i=0;i<n;i++) cin>>x[i]>>y[i];
    sort(x,x+n);
    sort(y,y+n);
    int X=x[n/2],Y=y[n/2];
    for(int i=0;i<n;i++) sum+=abs(x[i]-X)+abs(y[i]-Y);
    cout<<sum<<endl;
    return 0;
}

794: 最近对问题

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
double Distance(double x1,double y1,double x2,double y2)
{
    double dis=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    return dis;
}
int main()
{
    int n,m;
    double x1[1001],y1[1001];
    cin>>n;
    while(n--)
    {
        cin>>m;
        for(int i=0;i<m;i++) cin>>x1[i]>>y1[i];
        double min=INF;
        double t;
        for(int i=0;i<m;i++)
            for(int j=i+1;j<m;j++)
            {
                t=Distance(x1[i],y1[i],x1[j],y1[j]);
                if(t<min) min=t;
            }
        cout<<fixed<<setprecision(4)<<min<<endl;
    }
    return 0;
}

492: 荷兰国旗问题(The Dutch flag problem)

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n,b[5]={0};
	cin>>n;
	char a[n];
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
		if(a[i]=='R') b[0]++;
		else if(a[i]=='W') b[1]++;
		else b[2]++;
	}
	for(int i=0;i<b[0];i++) cout<<'R';
	for(int i=0;i<b[1];i++) cout<<'W';
	for(int i=0;i<b[2];i++) cout<<'B';
	cout<<endl;
}

642:俄式乘法

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int m,n,sum=0;
	cin>>m>>n;
	while(m!=0)
	{
		if(m%2==0)
		{
			m=m/2;
			n=2*n;
		}
		else
		{
			if(m!=1)
			{
				cout<<n<<" + ";//注意空格
				sum+=n;
			}
			else cout<<n<<" = "<<sum+n<<endl;
			m=(m-1)/2;
			n=n*2;
		}
	}
}

76:数字模式的识别

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n,maxi=0,b[2000000];
	cin>>n;
	int a[n];
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
		b[a[i]]++;
	}
	for(int i=0;i<2000000;i++)
		maxi=max(maxi,b[i]);
	for(int i=0;i<2000000;i++)
		if(b[i]==maxi) cout<<i<<endl;
}

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

arrest404

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值