解题思路:
只想到了两个思路,一个是用循环做模拟,一个是找规律.

简单模拟一下,A0->A1  是A1的短边等于A0的长边减半,A1的长边等于A0的短边。

代码如下:

#include <stdio.h>
  
int main() 
{
    int x=1189,y=841;//x为长边,y是短边
    int i,n;
    scanf("A%d",&n);
    for(i=0;i<n;i++){
        int k=y;//保留上一个的短边
        y=x>>1;//让短边等于上一个的长边减半
        x=k;//现在的长边等于上一个的短边
    }
    printf("%d\n%d",x,y);
       
    return 0;
}

还有一个就是找规律:


0x/1y/1
1x/2y/1
2x/2y/2
3x/4y/2
4x/4y/4
5x/8y/4
6x/8y/8
7x/16x/8
8x/16x/16
9x/32x/16

很容易发现,当n为偶数的时候x和y除的相同,当n为奇数的时候x比y多除了2


而1 2 4 8 16 32 是2的0 1 2 3 4 5次方,也就是n/2次方

代码实现如下:

#include <stdio.h>
  
int main() 
{
    int x=1189,y=841;
    int n;
    scanf("A%d",&n);//这里使用A%d就不用单独定义字符变量或者再做提取了
    if(n&1){
        x/=1<<(n/2+1);//奇数时多除2
        y/=1<<(n/2);
        printf("%d\n%d",y,x);//奇数时y比x大
    }else{
        x/=1<<(n/2);
        y/=1<<(n/2);
    printf("%d\n%d",x,y);
    }
       
    return 0;
}


点赞(0)
 

0.0分

11 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 6 条评论

红眼十七蝉 1月前 回复TA
@Canberra111 牛逼格拉斯
赵志凌 10月前 回复TA
@Canberra111 666
Canberra111 11月前 回复TA
@Canberra111 O(1)算法复杂度,最快的
Canberra111 11月前 回复TA
#include <bits/stdc++.h>
using namespace std; 
int main()
{
	string s;
	cin >> s;
	if(s=="A0"){
		cout <<1189<<endl;
		cout <<841<<endl;		 
	}
	if(s=="A1"){
		cout <<841<<endl;	
		cout <<594<<endl;	 
	}
	if(s=="A2"){
		cout <<594<<endl;	
		cout <<420<<endl;	 
	}
	if(s=="A3"){
		cout <<420<<endl;	
		cout <<297<<endl;	 
	}
	if(s=="A4"){
		cout <<297<<endl;	
		cout <<210<<endl;	 
	}
	if(s=="A5"){
		cout <<210<<endl;	
		cout <<148<<endl;	 
	}
	if(s=="A6"){
		cout <<148<<endl;	
		cout <<105<<endl;	 
	}
	if(s=="A7"){
		cout <<105<<endl;	
		cout <<74<<endl;	 
	}
	if(s=="A8"){
		写不下了,面向结果编程
1年前 回复TA
#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int x = 1189, y = 841;
	int i, n;
	scanf("A%d", &n);
	for (i = 0;i < n;i++)
	{
		int k = y;
		y = x >> 1;
		x = k;
	}
	printf(" % d\n%d", x, y);
	return 0;
}
1年前 回复TA
#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int x = 1189, y = 841;
	int i, n;
	scanf("A%d", &n);
	for (i = 0;i < n;i++)
	{
		int k = y;
		y = x >> 1;
		x = k;
	}
	printf(" % d\n%d", x, y);
	return 0;
}