东方博弈1221~1240题解

八个月了,由于个人参加CAAU,很久没更新了。

  1. 这次更新1235,1237无答案,欢迎各位补充。
  2. 长时间没更新,排版会有小问题,勿喷。
  3. 最后提前祝大家五一假期快乐🙂😊!

1221


#include <bits/stdc++.h>
using namespace std;
int a[110],n,i;
double ans;
int main(){
	cin>>n;
	for(i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	for(i=n;i>n-5;i--){
		ans=ans+a[i];
	}
	printf("%0.1f",ans/5);
	return 0;
}

1222


A为存放盘子的塔,C为目标塔,B为辅助塔

算法分为三步

一、将A上n-1个盘子,借助于C ,全部放到B塔上

二、将A上剩下的一个盘子放到C塔上

三、将B塔上n-1个盘子,借助于A,全部放到C塔上

#include <bits/stdc++.h>
using namespace std;

/*
   移动的过程:
   1、先将n-1个金片(n个金片除了最下面一个以外的金片)
      从A位置,借助C位置,移动到B位置,需要fun(n-1)步
   2、将A位置的最下方的一个金片,直接移动到C位置,需要1步
   3、将B位置的n-1个金片,从B位置借助A位置移动到C位置
      需要fun(n-1)步
   因此得到结论如下:fun(n) = fun(n-1) * 2 + 1 
*/

/*
  函数的作用:将n个金片从p1位置,借助p2位置,移动到p3位置
  p1:源位置(金片所在的源位置)
  p2:辅助位置(移动的过程中要借助的位置)
  p3:目标位置(移动到的位置) 
*/
void move(int n,char p1,char p2,char p3){
	//递归的出口:只要有金片就要递归,没有金片递归停止 
	if(n > 0){
		//第1步:将n-1个金片,从p1位置,借助p3位置,移动到p2位置
		move(n-1,p1,p3,p2);
		//第2步:将p1位置的第n个金片直接移动到p3位置 
		cout<<p1<<" To "<<p3<<endl;
		//第3步:将p2位置的n-1个金片,借助于p1位置,移动到p3位置
		move(n-1,p2,p1,p3); 
	} 
}

int main(){
	int n;
	cin>>n;
	
	//递归调用,打印移动的步骤
	move(n,'A','B','C');	
	return 0;
}

1223 

#include <bits/stdc++.h>
using namespace std;
int fun(int n)
{
    if(n == 1) return 1;
    else return fun(n-1)*2+1; 
}

int main()
{
    int n;
    cin>>n;
    cout<<fun(n);
    return 0;
}

 

 1224

#include<iostream>
using namespace std;
int a[25][25];
int main()
{
    int n, m, x, y;
    cin >> n >> m >> x >> y;
    for(int i = 0; i <= n; i++)
    {
        for(int j = 0; j <= m; j++)
        {
            a[i][j] = -1;
        }
    }
    int dx[10] = {0, -1, -1, -2, -2, 1, 1, 2, 2};
    int dy[10] = {0, -2, 2, -1,  1, -2, 2, -1, 1};
    for(int i = 0; i <= 9; i++)
    {
        int ix = dx[i] + x;
        int iy = dy[i] + y;
        if(ix >=0 && ix <=n && iy >= 0 && iy <= m)
        {
            a[ix][iy] = 0;
        }
    }

    a[0][0] = 1;
    for(int i = 0; i <= n; i++)
    {
        for(int j = 0; j <= m; j++)
        {
            if(i == 0 && a[i][j] == -1) a[i][j] = a[i][j-1];
            else if(j == 0 && a[i][j] == -1) a[i][j] = a[i-1][j];
            else if(a[i][j] == -1) a[i][j] = a[i][j-1] + a[i-1][j];
        }
    }

    cout << a[n][m];
    return 0;
}

1225

 

#include <stdio.h>
int main()
{
    int n,i,j,m=0,z,y;
    scanf("%d",&n);
    z=2;
    y=2*n-1;
    for (i=0;i<n;i++)
    {   
       m++;
       z--;
        for (j=0;j<y;j++)
        {
            if (i==n-1||j==n-m||j==n-z)
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
    return 0;
}

 1226

#include <bits/stdc++.h>
using namespace std;

int main(){
	int n,i,j;
	cin>>n;
	for(i=1;i<=n;i++){
		for(j=1;j<=n-i;j++){
			cout<<" ";
		}
		if(i==1){
			for(j=1;j<=n;j++){
				cout<<"*";
			}
		}else{
			cout<<"*";
			for(j=1;j<=n+2*(i-2);j++){
				cout<<" ";
			}
			cout<<"*";
		}
		cout<<endl;
	}
	
	for(i=1;i<=n-1;i++){
		for(j=1;j<=i;j++){
			cout<<" ";
		}
		if(i==n-1){
			for(j=1;j<=n;j++){
				cout<<"*";
			}
		}else{
			cout<<"*";
			for(j=(n-2-i)*2+n;j>=1;j--){
				cout<<" ";
			}
			cout<<"*";
		}
		cout<<endl;
	}
	return 0;
}

 1227

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int q, big, small, x, i;
    cin >> q >> big >> small;
    for (i = 2; i <= (q - 2 * small) / big; i = i + 2)
    {
        x = q - i * big;
        if (x % small == 0 && x / small % 2 == 0)
        {
            cout << i << " " << x / small << endl;
        }
    }
    return 0;
}

 1228

#include<bits/stdc++.h>
using namespace std;
int main() {
 
	int a[1000],b[0100],n,m;
	scanf("%d%d",&n,&m);
	int i,sum=0;
	for(i=0; i<n; i++)
		scanf("%d",&a[i]);
		sort(a,a+n);
		for(i=0;i<m;i++)
		b[i]=a[i];
		for(i=m;i<n;i++)
		b[i]=b[i-m]+a[i];
		for(i=0;i<n;i++)
		sum=sum+b[i];
		printf("%d\n",sum);
}

1229

#include <bits/stdc++.h>
using namespace std;
int a[1100],n,i,j,x,p,k = 0;
int main() 
{
    cin>>n;
    for(i = 1;i <= n;i++)
{
        cin>>x;
        p = -1;
        for(j = 1;j <= k;j++)
{
            if(a[j] >= x)
{
                p = j;
                break;
            }
        }
        if(p != -1)
{
            a[p] = x;
        }else{
            k++;
            a[k] = x;
        }
    }
cout<<k;
    return 0;
}

1230

#include <stdio.h>
#include <math.h>
  int main()
  {
  int row,space,star,n,m;
  scanf("%d",&n);
  m=n-1;
  for(row=-m/2;row<=(n-1)/2;row++)
  {
  	for(star=1;star<=0;star++)
		printf(" ");
	for(space=0;space<=abs(row);space++)
	    printf("*");
	    printf("\n");
  }
}

1231 

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int c=0,n,a[111],count=0,Max=0,sum=0;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		sum+=a[i];
	}
	cout<<fixed<<setprecision(1)<<double(sum)/double(n)<<' ';
	for(int i=1;i<=n;i++){
		if(a[i]>=double(sum)/double(n))c++;
	}
	cout<<c<<' '<<n-c;
	return 0;
}

1232

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	int n;
	cin >> n;
	int* p = new int[n];
	int max = 0, max_loc = 0;
	int min = 0, min_loc = 0;
	for (int i = 0; i < n; i++)
	{
		cin >> p[i];
		if (i == 0)
		{
			max = p[i];
			min = p[i];
			max_loc = 0;
			min_loc = 0;
		}
		if (p[i] > max)
		{
			max = p[i];
			max_loc = i;
		}
		if (p[i] < min)
		{
			min = p[i];
			min_loc = i;
		}
	}
	int temp = p[max_loc];
	p[max_loc] = p[min_loc];
	p[min_loc] = temp;
	for (int i = 0; i < n; i++)
	{
		cout << p[i] << " ";
	}
	delete[]p;
	return 0;
}

1233

#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
int main()
{
	int n;
	cin >> n;
	int* p = new int[n];
	for (int i = 0; i < n; i++)
	{
		cin >> p[i];
	}
	sort(p, p + n);
	double num = 0;
	if (n % 2 == 1)
	{
		num = p[(n - 1) / 2];
		cout << fixed << setprecision(1) << num;
	}
	else
	{
		num = (p[(n - 1) / 2] + p[(n + 1) / 2]) / 2.0;
		cout << fixed << setprecision(1) << num;
	}
	delete[]p;
	return 0;
}

1234

 

#include <iostream>
#include <cmath>
using namespace std;
bool prime(int& n)
{
	int prime = 1;
	for (int i = 2; i <= sqrt(n); i++)
	{
		if (n % i == 0)
		{
			prime = 0;
			break;
		}
	}
	if (prime == 1)
	{
		return true;
	}
	else
	{
		return false;
	}
}
void analyze(int &a, int &b)
{
	int i;
	for (i = 2;; i++)
	{
		if (prime(i) == 1 && a % i == 0)
		{
			cout << i << " ";
			break;
		}
	}
	a /= i;
	b++;
	if (a != 1)
	{
		analyze(a,b);
	}
	else
	{
		return;
	}
}
int main()
{
	int n;
	cin >> n;
	int num = 0;
	analyze(n, num);
	cout << endl << num;
	return 0;
}

真的很抱歉,实在不会。搜过当没有答案,欢迎大佬留言。

1236

 

#include<bits/stdc++.h>
using namespace std;
int a[1000005];
int n,x;
int bs(int x){
	int left=1;
	int right=n;
	while(left<=right){
		int mid=(left+right)/2;
		if(a[mid]==x){
			return mid;
		}
		if(a[mid]>x){
			right=mid-1;
		}
		if(a[mid]<x){
			left=mid+1;
		}
	}
	return -1;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	cin>>x;
	cout<<bs(x);
	return 0;
}

1238

#include<iostream>
using namespace std;
int main()
{
	int o;
	cin>>o;
	unsigned long long a[717]={0,1,1};
	for(int i=3;i<=o;i++)
	{
		a[i]=a[ i - 2 ]+a[ i - 1 ];
	}
	cout<<a[o];
}

1239 

#include <bits/stdc++.h>
int main()
{
    int n,i,j,m=0,z;
    scanf("%d",&n);
    z=n+1;
    if(n>=3&&n<=79)
    {
    	for (i=0;i<n;i++)
    {   
       m++;
       z--;
        for (j=0;j<n;j++)
        {
            if (j==n-m||j==n-z)
                printf("X");
            else
                printf(" ");
        }
        printf("\n");
    }
	}
    return 0;
}

1240

#include <bits/stdc++.h>
using namespace std;
void fun(int n){
	if(n==0) cout<<"ling"; 
	else if(n==1) cout<<"yi";
	else if(n==2) cout<<"er";
	else if(n==3) cout<<"san";
	else if(n==4) cout<<"si";
	else if(n==5) cout<<"wu";
	else if(n==6) cout<<"liu";
	else if(n==7) cout<<"qi";
	else if(n==8) cout<<"ba";
	else if(n==9) cout<<"jiu";
}
int main(){
	int n;
	cin>>n;
	if(n < 10) fun(n);
	else{
		int s = n / 10;
		int g = n % 10;
		if(s != 1){
			fun(s);
			cout<<" ";	
		}
		cout<<"shi";
		if(g != 0){
			cout<<" ";
			fun(g);
		} 
	} 
	return 0;
}

 最后希望宏远小虎(本队)能在U12组别卫冕全国冠军!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值