作业介绍

#include<iostream>
using namespace std;
long long n, turn , siz;
int main() {
	cin >> n;
	while (n > 3) {
		siz = 3;
		turn = 4;//中间 加的字符 
		while (n >= siz) {
			//	找到siz < n <= 2 *siz
			siz = siz * 2 + turn; 
			turn ++;
		}
		turn--;//注释里面必须解释为什么先turn-- 
		siz = (siz - turn) / 2;//这个也要解释 
		if (n <= siz + turn) {//是不是属于mooooo这部分 
			if (n == siz + 1) {
				cout << "m";//第一个是m 
			} else {
				cout << "o";
			}
			return 0;
		}
		n -= turn + siz;
	}
	if (n == 1) {
		cout << "m";//第一个是m 
	} else {
		cout << "o";
	}
} 

//如果n很小,
//你把暴力的方法写出来
//COW
//COWWCO
//COWWCOOCOWWC
//怎么拼接?
//怎么把最后一个字符拿到前面来?
#include<iostream>
using namespace std;
int main() {
	string s;
	long long n;
	cin >> s >> n;
	/*while(s.size() < n) {
		string a;
		a += s[s.size() - 1];
		for (int i = 0; i < s.size() - 1; i++) {
			a += s[i];
		}
		s += a;//
	}
	cout << s[n - 1];*/
	//输入sn
	//循环直到n小于s.size()
	while (n > s.size()) {
		long long siz = s.size();
		while (siz < n) {
		//	找到siz < n <= 2 *siz
			siz *= 2;
		}siz /= 2;//此时siz>=n,要/2 
		//	根据n和siz的关系把n减小 
		if (n == siz + 1) {
			n = siz;
		} else {
			n = n - siz - 1;
		}
	}
	cout << s[n - 1];
	
} 
状态
已结束
题目
5
开始时间
2025-5-28 18:00
截止时间
2025-6-5 23:59
可延期
24 小时