东华oj 80道(1~40题)

2023东华大学机试OJ进阶版1-81题 先排序。每次找两个最小的数,把其中一个置为两数之和,并累加这个和值,另一个数置为-1,然后再排序,重复操作,直到只剩下一个数。105。 阅读详情

1. 质因数

#include<bits/stdc++.h>
using namespace std;
int n,t;
vector<int> v;
bool is_prime(int x)
{
	for(int i=2;i<=x/i;i++)
		if(x%i==0)
			return false;
	return true;
}

int main()
{
	cin>>n;
	t=n;
	cout<<n<<"=";
	while(n!=1)
	{
		for(int i=2;i<=t;i++)
		{
			if(is_prime(i) && n%i==0)
			{
				v.push_back(i);
				n/=i;
				break;
			}
		}
	}
	for(int i=0;i<v.size();i++)
	{
		if(i) cout<<"*";
		cout<<v[i];
	}
	
	return 0;
}

2.谁是老二?

#include<bits/stdc++.h>
using namespace std;
string s;
int n;
int main()
{
	while(cin>>n)
	{
		int a[110];
		priority_queue<int> q;
		set<int> se;
		for(int i=0;i<n;i++)
		{
			cin>>a[i];
			if(!se.count(a[i]))
			{
				q.push(a[i]);
				se.insert(a[i]);
			}	
		}
		q.pop();
		if(!q.size()) puts("none");
		else{
			auto t=q.top();
			cout<<t;
			for(int i=0;i<n;i++)
			{
				if(a[i]==t)
				{
					cout<<" "<<i;	
				}
			}
			puts("");			
		}

	}
	
	return 0;
}

3.骑士斗恶龙

#include<bits/stdc++.h>
using namespace std;
string s;
const int N = 2e4+10;
int n,m;
int d[N],k[N];
int main()
{
	while(cin>>n>>m)
	{
		for(int i=0;i<n;i++) cin>>d[i];
		for(int i=0;i<m;i++) cin>>k[i];
		if(n>m) puts("Lose!");
		else{
			sort(d,d+n);
			sort(k,k+m);
			int res=0,i=0,j=0;
			for(i=0;i<m;i++)
			{
				if(k[i]>=d[j])
				{
					j++;
					res+=k[i];
				}
				if(j>=n) break;
			}
			if(j<n) puts("Lose!");
			else cout<<res<<endl;
		}
	}
	return 0;
}

4.蛇形方阵

#include<bits/stdc++.h>
using namespace std;
string s;
const int N = 21;
int n,m;
int a[N][N];
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			a[i][j]=++m;
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(i%2){
			printf("%4d",a[i][1]);
			for(int j=2;j<=n;j++) printf("%4d",a[i][j]);
			puts("");
		}
		else{
			printf("%4d",a[i][n]);
			for(int j=n-1;j>0;j--) printf("%4d",a[i][j]);
			puts("");
		}
	}
	
	return 0;
}

5.单词统计

#include<bits/stdc++.h>
using namespace std;
string s;
int n;
int main()
{
	cin>>n;
	getchar();
	while(n--)
	{
		int cnt=0;
		getline(cin,s);
		stringstream ssin(s);
		while(ssin>>s)
		{
			cnt++;
		}
		cout<<cnt<<endl;
	}
	return 0;
}

6.转换成十进制

#include<bits/stdc++.h>
using namespace std;
string s;
const int N = 21;
int n,m;
int main()
{
	while(cin>>n>>s)
	{
		int t=1,ans=0;
		for(int i=(int)s.size()-1;i>=0;i--)
		{
			if(s[i]>='0' && s[i]<='9') ans+=(s[i]-'0')*t;
			else ans+=(s[i]-'A'+10)*t;
			t*=n;
		}
		cout<<ans<<endl;
	}
	
	return 0;
}

7.十进制转换成其它进制

#include<bits/stdc++.h>
using namespace std;
string s;
const int N = 21;
int n,m;
int main()
{
	while(cin>>n>>m)
	{
		string ans="";
		while(n)
		{
			int t=n%m;
			if(t>=0 && t<10) ans=char(t+'0')+ans;
			else ans=char('A'+t-10)+ans;
			n/=m;
		}
		cout<<ans<<endl;
	}
	
	return 0;
}

8.最大相同子串

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
string s1,s2,ans;
int main()
{
	while(cin>>s1>>s2)
	{
		ans="";
		int len1=s1.size(),len2=s2.size();
		if(len1>len2)
		{
			swap(s1,s2);
			swap(len1,len2);
		}
		for(int i=0;i<len1;i++)
		{
			for(int j=1;j<=len1-i;j++)	
			{
				string t=s1.substr(i,j);
				int idx=s2.find(t);
				
				if(idx!=-1)
				{
					if((int)ans.size()<1) ans=t;
					else{
						if(t.size()>ans.size())
						{
							ans=t;
						}
						else if(t.size()==ans.size() && t<ans)
						{
							ans=t;
						}
					}	
				}
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}

9.冰雹数

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
int n,ans;
set<int> se;
int main()
{
	cin>>n;
	if(n==1){
		cout<<1;
		return 0;
	}
	for(int i=2;i<=n;i++)
	{
		ans=max(ans,i);
		if(!se.count(i)) se.insert(i);
		else continue;
		int j=i;
		while(j!=1)
		{
			if(j%2) j=j*3+1;
			else j/=2;
			ans=max(ans,j);
			if(!se.count(j)) se.insert(j);
			else break;			
		}
	}
	cout<<ans;
	return 0;
}

10.小数第n位

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
typedef long long LL;
int n,ans;
int main()
{
	LL a,b;
	cin>>a>>b>>n;
	while(n-10>0)
	{
		a*=1e10;
		a%=b;
		n-=10;
	}
	for(int i=0;i<n+2;i++)
	{
		a*=10;
		if(i>=n-1) 
			printf("%lld",a/b);
		a%=b;
	}
	return 0;
}

11.丑数

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
LL n,ans,top,k,x,a[N];
set<LL> se;
int main()
{
	cin>>n>>k;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
		se.insert(a[i]);
	}
	while(k--)
	{
		top=*se.begin();
		se.erase(se.begin());
		for(int i=0;i<n;i++)
			se.insert(top*a[i]);
	}
	cout<<top;
	return 0;
}

12.笨小猴

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,maxt=-N,mint=N;
map<char,int> mp;
string s;
bool is_prime(int x)
{
	for(int i=2;i<=x/i;i++)
		if(x%i==0)
			return false;
	return true;
}
int main()
{
	getline(cin,s);
	for(int i=0;i<s.size();i++)
	{
		if(s[i]>='a' && s[i]<='z')
			mp[s[i]]++;
	}
	for(int i='a';i<='z';i++)
	{
		if(mp[i])
		{
			maxt=max(maxt,mp[i]);
			mint=min(mint,mp[i]);			
		}
	}
	maxt-=mint;
	if(maxt<2){
		cout<<"No Answer"<<endl;
		cout<<0<<endl;
	}
	else{
		if(is_prime(maxt)){
			cout<<"Lucky Word"<<endl;	
			cout<<maxt<<endl;
		}
		else{
			cout<<"No Answer"<<endl;
			cout<<0<<endl;
		}
	}
	return 0;
}

13.字串统计

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,maxt;
string s,ans;
int main()
{
	cin>>n;
	cin>>s;
	for(int i=n;i<s.size();i++)
	{
		for(int j=0;j<s.size()-i;j++)
		{
			string s1=s.substr(j,i);
			int cnt=0;
			for(int k=j+1;k<s.size()-i;k++)
			{
				string s2=s.substr(k,i);
				if(s1==s2) cnt++;
			}
			
			if((cnt>maxt) || s1.size()>ans.size() && cnt==maxt)
			{
				maxt=cnt;
				ans=s1;
			}
		}
	}
	cout<<ans;
	return 0;
}

14.Anagrams问题

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,a1[30],a2[30];
string s,s1,s2;
int main()
{
	cin>>s1>>s2;
	for(int i=0;i<s1.size();i++)
	{
		if(s1[i]>='a' && s1[i]<='z') a1[s1[i]-'a']++;
		if(s1[i]>='A' && s1[i]<='Z') a1[s1[i]-'A']++;
	}
	for(int i=0;i<s2.size();i++)
	{
		if(s2[i]>='a' && s2[i]<='z') a2[s2[i]-'a']++;
		if(s2[i]>='A' && s2[i]<='Z') a2[s2[i]-'A']++;
	}	
	for(int i=0;i<30;i++)
	{
		if(a1[i]!=a2[i])
		{
			cout<<"N";
			return 0;
		}
	}
	cout<<"Y";
	return 0;
}

15.身份证号码升级

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,sf,a[20]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
string s;
char c[11]={'1','0','x','9','8','7','6','5','4','3','2'};
int main()
{
	cin>>s;
	string t=s.substr(0,6);
	t+="19";
	t+=s.substr(6);
	s=t;
	for(int i=0;i<17;i++)
		sf+=((s[i]-'0')*a[i]);
	sf%=11;
	s+=c[sf];
	cout<<s;
	return 0;
}

16.彩票

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,sf,jiang[10];
set<int> se;
int main()
{
	cin>>n;
	for(int i=0;i<7;i++)
	{
		cin>>sf;
		se.insert(sf);
	}
	while(n--)
	{
		int cnt=0;
		for(int i=0;i<7;i++)
		{
			cin>>sf;
			if(se.count(sf)) cnt++;
		}
		jiang[7-cnt]++;
	}
	for(int i=0;i<7;i++) cout<<jiang[i]<<" ";
	return 0;
}

17.质数的后代

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
int n,primes[N],co;
bool st[N];
set<int> se;
int main()
{
	for(int i=2;i<=N;i++)
	{
		if(!st[i]){
			primes[co++]=i; 
			se.insert(i);
		}
		for(int j=0;primes[j]<=N/i;j++)
		{
			st[i*primes[j]]=1;
			if(i%primes[j]==0) break;
		}
	}
	cin>>n;
	int x;
	for(int i=0;i<n;i++)
	{
		int f=0;
		cin>>x;
		for(int i=0;i<co;i++)
		{
			if(x%primes[i]==0 && se.count(x/primes[i]))
			{
				f=1;
				break;
			}
		}
		if(f) puts("Yes");
		else puts("No");
	}

	return 0;
}

18.高精度乘法

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e5+10;
int a[M],b[M],l1,l2;
char s[N];
void print(int a[])
{
    int k=M-1;
    while(k && !a[k]) k--;
    for(int i=k;i>=0;i--) cout<<a[i];
}
void mul(int a[],int b[])
{
    int t=0,temp[M];
    memset(temp,0,sizeof temp);
    for(int i=0;i<l1;i++)
        for(int j=0;j<l2;j++)
            temp[i+j]+=a[i]*b[j];
            
    for(int i=0;i<l1+l2;i++)
    {
        t+=temp[i];
        temp[i]=t%10;
        t/=10;
    }
    
    memcpy(a,temp,sizeof temp);
}
int main()
{
    scanf("%s",s);
    l1=strlen(s);
    for(int i=0;i<l1;i++) a[l1-i-1]=s[i]-'0';
    
    scanf("%s",s);
    l2=strlen(s);
    for(int i=0;i<l2;i++) b[l2-i-1]=s[i]-'0';
    
    mul(a,b);
    print(a);
    return 0;
}

19.阶乘末尾

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10,M= 2e5+10;
int a[N],n,len;
void mul(int a[],int x)
{
	int c[N],temp=0;
	memset(c,0,sizeof c);
	for(int i=0;i<N;i++)
	{
		temp+=x*a[i];
		c[i]=temp%10;
		temp/=10;
	}
	memcpy(a,c,sizeof c);
}
int main()
{
	a[0]=1;
    scanf("%d%d",&n,&len);
	for(int i=2;i<=n;i++)
	{
		mul(a,i);
	}
	string res="";
	for(int i=0;i<len;i++) res=char(a[i]+'0')+res;
	cout<<res;
    return 0;
}

20.寂寞的数

#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+10,M= 2e5+10;
bool st[N];
int n;
void d(int u)
{
	if(u>N) return ;
	int res=u;
	while(u)
	{
		int t=u%10;
		res+=t;
		u/=10;
	}
	st[res]=1;
	d(res);
}
int main()
{
	for(int i=1;i<=N;i++)
	{
		if(!st[i])
		{
			d(i);
		}
	}
	cin>>n;
    for(int i=1;i<=n;i++)
    {
    	if(!st[i])
    		cout<<i<<endl;
	}
	return 0;
}

21.数列

#include<bits/stdc++.h>
using namespace std;
const int N = 2e3+10,M= 2e9;
bool st[N];
int f,k,n,a[N],ans;
set<int> se;
void dfs(int u)
{
	if(f==2) return ;
	if(u==10){
		if(!f){
			f=1;
			return ;
		}
		else if(f==1){
			int t=1,res=0;
			for(int i=9;i>=0;i--)
			{
				if(st[i]) res+=t;
				t*=k;
			}
			if(!se.count(res)){
				se.insert(res);	
				if(se.size()==n){
					cout<<res;
					f=2;
				}
			}
			
			return ;			
		}

	}
	dfs(u+1);
	st[u]=1;
	dfs(u+1);
	st[u]=0;
}
int main()
{
	cin>>k>>n;
	dfs(0);
	
	return 0;
}

22.孪生素数

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e9;
bool st[N];
int k,n,x,ans,primes[N],cnt,p[N];
set<int> se;
int main()
{
	for(int i=2;i<=N;i++)
	{
		if(!st[i]) primes[cnt++]=i;
		for(int j=0;primes[j]<=N/i;j++)
		{
			st[primes[j]*i]=1;
			if(i%primes[j]==0) break;
		}
	}
	for(int i=1;i<cnt;i++)
	{
		if(primes[i]==primes[i-1]+2)
		{
			p[k++]=primes[i];
		}
	}
	while(cin>>n)
	{
		if(n<0) break;
		int co=0;
		for(co=0;co<k;co++)
		{
			if(p[co]>n) break;
		}
		cout<<co<<endl;
	}

	return 0;
}

23.区间k大数查询

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e9;
bool st[N];
int k,n,m,x,ans,a[N],cnt,p[N];
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	cin>>m;
	int l,r;
	while(m--)
	{
		cin>>l>>r>>k;
		vector<int> v; 
		for(int i=l;i<=r;i++)
		{
			v.push_back(a[i]);
		}
		sort(v.begin(),v.end(),greater<int>());
		cout<<v[k-1]<<endl;
	}

	return 0;
}

24.数的统计

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e9;
int k,n,m,x,ans,a[N];
map<int,int> mp;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>x;
		mp[x]++;
	}
	for(auto x:mp)
		cout<<x.first<<" "<<x.second<<endl;
	return 0;
}

25.数字黑洞

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M= 2e9;
int k,n,m,x,co,ans,a[N];
map<int,int> mp;
string s;
int main()
{
	cin>>s;
	while(s!="6174")
	{
		sort(s.begin(),s.end());
		int t1=0,t2=0,k1=1000,k2=1;
		for(int i=s.size()-1;i>=0;i--)
		{
			t1+=(s[i]-'0')*k1;
			t2+=(s[i]-'0')*k2;
			k1/=10;
			k2*=10;
		}
		t1-=t2;
		s=to_string(t1);
		while(s.size()<4) s+='0';
		co++;
	}
	cout<<co;
	return 0;
}

26.质数的乘积

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5+10,MOD=5e4;
int k=2,n,m,x,co,a[N];
LL ans=1;
int main()
{
	cin>>n;
	if(n==0) cout<<0;
	else if(n==1) cout<<2;
	else if(n==2) cout<<6;
	else{
		ans=6;
		for(int times=3,i=5;times<=n;i++)
		{
			int f=0;
			for(int j=2;j<=sqrt(i);j++)
			{
				if(i%j==0 && i!=j)
				{
					f=1;
					break;
				}
			}	
			if(!f){
				ans=(ans*i)%MOD;
				times++;
			}
		}	
		cout<<ans%MOD;
	}
	return 0;
}

27.暗恋

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 210,MOD=5e4;
int n,m,x,co,g[N][N],ans;
bool check(int x,int y,int len)
{
	int color=g[x][y];
	for(int i=0;i<len;i++)
		for(int j=0;j<len;j++)
			if(g[x+i][y+j]!=color)
				return false;
	return true;
}
int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			cin>>g[i][j];
	
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			for(int len=ans+1;len<max(n,m);len++)
			{
				if(i+len<=n && j+len<=m)
				{
					if(check(i,j,len)) ans=len;
				}
				else break;
			}
		}
	}
	cout<<ans*ans;
	return 0;
}

28.约瑟夫环

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e2+10,MOD=5e4;
int n,k;
bool st[N];
int main()
{
	while(cin>>n>>k)
	{
		vector<int> v;
		memset(st,0,sizeof st);
		int cur=0,cnt=1,tot=0;
		while(tot!=n)
		{
			if(st[cur])
			{
				cur=(cur+1)%n;
				continue;	
			}
			
			if(cnt%k==0)
			{
				st[cur]=1;
				v.push_back(cur+1);				
				tot++;
			}
			cur=(cur+1)%n;
			cnt++;
		}
		for(int i=0;i<v.size()-1;i++) cout<<v[i]<<" ";
		cout<<v[v.size()-1]<<endl;
	}
	return 0;
}

29.连续正整数的和

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5+10,MOD=5e4;
int n,r;
bool st[N];
void dfs(int u,int tot)
{
	if(tot>n) return ;
	if(tot==n)
	{
		r=u-1;
		return ;	
	}
	dfs(u+1,tot+u);
}
int main()
{
	cin>>n;
	for(int i=1;i<=n/2;i++)
	{
		r=-1;
		dfs(i,0);
		if(r!=-1)
		{
			cout<<i<<" "<<r<<endl;
		}
	}
	return 0;
}

30.翻硬币

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e2+10,MOD=5e4;
int n,k,co;
string s1,s2;
int main()
{
	cin>>s1>>s2;
	for(int i=0;i<s1.size()-1;i++)
	{
		if(s1[i]!=s2[i])
		{
			if(s1[i]=='*') s1[i]='o';
			else s1[i]='*';
			if(s1[i+1]=='o') s1[i+1]='*';
			else s1[i+1]='o';
			co++;
		}
	}
	cout<<co;
	return 0;
}

31.分糖果

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e2+10,MOD=5e4;
int n,a[N],b[N],cnt=0;
string s1,s2;
int main()
{
	cin>>n;
	for(int i=0;i<n;i++) cin>>a[i];
	while(1)
	{
		memset(b,0,sizeof b);
		for(int i=0;i<n-1;i++)
			b[i]=a[i+1]/2;
		b[n-1]=a[0]/2; 
		for(int i=0;i<n;i++)
		{
			a[i]/=2;
			a[i]+=b[i];
			if(a[i]%2){
				a[i]++;
				cnt++;
			}
		}
		set<int> se;
		int f=0;
		for(int i=0;i<n;i++)
		{
			se.insert(a[i]);
			if(se.size()>1)
			{
				f=1;
				break;
			}
		}
		if(!f){
			cout<<cnt;
			break;
		}
	}
	return 0;
}

32.扫雷

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e2+10,MOD=5e4;
int n,m,a[N][N],cnt=1;
char g[N][N];
int dx[8]={1,0,-1,0,-1,-1,1,1},dy[8]={0,1,0,-1,-1,1,-1,1};
int main()
{
	while(cin>>n>>m)
	{
		if(!n && !m) break;
		for(int i=0;i<n;i++)
			for(int j=0;j<m;j++)
				cin>>g[i][j];		
		
		memset(a,-1,sizeof a);
		for(int i=0;i<n;i++)
			for(int j=0;j<m;j++)
			{
				if(g[i][j]!='*')
				{
					int cnt=0;
					for(int k=0;k<8;k++)
					{
						int x=i+dx[k],y=j+dy[k];
						if(x>=0 && x<n && y>=0 && y<m && g[x][y]=='*') cnt++;
					}
					a[i][j]=cnt;					
				}
			}
		cout<<"Field #"<<cnt<<":"<<endl;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(a[i][j]==-1) cout<<'*';
				else cout<<a[i][j];
			}
			cout<<endl;
		}
		cout<<endl;
		cnt++;
	}
	
	return 0;
}

33.S01串

#include<bits/stdc++.h>
using namespace std;
string s="0";
int n;
int main()
{
	cin>>n;
	while(n--)
	{
		string t="";
		for(int i=0;i<s.size();i++)
		{
			if(s[i]=='0') t+='1';
			else t+="01";
		}
		s=t;
	}
	cout<<s;
	return 0;
}

34.身份证排序

#include<bits/stdc++.h>
using namespace std;
int n;
string str;
struct node{
	string s,dt;
	
	bool operator<(const node &p) const{
		if(dt!=p.dt) return dt>p.dt;
		return s>p.s;
	}
};
int main()
{
	vector<node> v;
	cin>>n;
	while(n--)
	{
		cin>>str;
		v.push_back({str,str.substr(6,8)});
	}
	sort(v.begin(),v.end());
	for(auto x:v) cout<<x.s<<endl; 
	return 0;
}

35.回文数

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
int n,m,cnt=1;
char a[N];
string s;
void add(char a[],char b[])
{
	char c[N];
	for(int i=0;i<N;i++) c[i]='0';
	int t=0;
	for(int i=0;i<N;i++)
	{
		int c1,c2;
		if(a[i]>='0' && a[i]<='9') c1=a[i]-'0';
		else c1=a[i]-'A'+10;
		if(b[i]>='0' && b[i]<='9') c2=b[i]-'0';
		else c2=b[i]-'A'+10;
		t=c1+c2+t;
		int cc=t%m;
		if(cc<10) c[i]=char(cc+'0');
		else c[i]=char(cc-10+'A');
		t/=m;		
	}
	memcpy(a,c,sizeof c);
}
int main()
{
	for(int i=0;i<N;i++) a[i]='0';
	cin>>m>>s;
	if(s==string(s.rbegin(),s.rend()))
	{
		cout<<"STEP="<<0;
		return 0;
	}
	for(int i=(int)s.size()-1;i>=0;i--)
		a[n++]=s[i];
	while(cnt<=30)
	{
		char b[N];
		for(int i=0;i<N;i++) b[i]='0';
		string t=string(s.rbegin(),s.rend());
		int idx=0;
		for(int i=(int)t.size()-1;i>=0;i--)
			b[idx++]=t[i];
		add(a,b);
		idx=N-1;
		while(a[idx]=='0') idx--;
		string ss="";
		for(int i=idx;i>=0;i--) ss+=a[i];
		if(ss==string(ss.rbegin(),ss.rend())){
			cout<<"STEP="<<cnt;
			break;	
		}
		s=ss;
		cnt++;
	}
	if(cnt>=30) puts("Impossible!");
	return 0;
}

36.新生舞会

#include<bits/stdc++.h>
using namespace std;
int n,m;
string s1,s2,s3;
map<string,string> mp1,mp2;
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>s1>>s2>>s3;
		mp1[s1]=s3,mp2[s2]=s3;
	}
	cin>>m;
	while(m--)
	{
		cin>>s1>>s2;
		int f=0;
		string sex1,sex2;
		if(mp1[s1].size()) sex1=mp1[s1];
		else sex1=mp2[s1];
		if(mp1[s2].size()) sex2=mp1[s2];
		else sex2=mp2[s2];
		if(sex1!=sex2) puts("Y");
		else puts("N");
	}
	return 0;
}

37.班级排名

#include<bits/stdc++.h>
using namespace std;
int n,m,sc,a[110];
string s1;
map<string,int> mp;
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>s1;
		mp[s1]=i;
	}
	cin>>m;
	while(m--)
	{
		int t=0;
		vector<int> v;		
		for(int i=0;i<n;i++)
		{
			cin>>sc>>s1;
			a[mp[s1]]+=sc;
			v.push_back(a[mp[s1]]);
			if(s1=="DaDa") t=a[mp[s1]];
		}
		sort(v.begin(),v.end(),greater<int>());
		for(int i=0;i<v.size();i++)
		{
			if(t==v[i])
			{
				cout<<i+1<<endl;
				break;
			}
		}
	}
	return 0;
}

38.铺地毯

#include<bits/stdc++.h>
using namespace std;
int n,m,f,a,b,c,d;
struct node{
	int x_1,y_1,x_2,y_2;
};
int main()
{
	vector<node> v;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a>>b>>c>>d;
		v.push_back({a,b,a+c,b+d});
	}
	cin>>a>>b;
	for(int i=n-1;i>=0;i--)
	{
		if(v[i].x_1<=a && a<=v[i].x_2 && v[i].y_1<=b && b<=v[i].y_2)
		{
			f=1;
			cout<<i+1;
			break;
		}
	}
	if(!f) cout<<-1;
	return 0;
}

39.最小乘积

#include<bits/stdc++.h>
using namespace std;
int n,m,r,ans,a[10],b[10],T;
int main()
{
	cin>>T;
	while(T--)
	{
		ans=0;
		cin>>n;
		for(int i=0;i<n;i++) cin>>a[i];
		for(int i=0;i<n;i++) cin>>b[i];
		sort(a,a+n);
		sort(b,b+n,greater<int>());
		for(int i=0;i<n;i++)
			ans+=a[i]*b[i];
		
		cout<<ans<<endl;
	}
	return 0;
}

40. 排队打水问题

#include<bits/stdc++.h>
using namespace std;
int n,m,r,ans,a[510];
priority_queue<int,vector<int>,greater<int> > q;
int main()
{
	cin>>n>>r;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
		ans+=a[i];
	}
	sort(a,a+n);
	for(int i=0;i<r;i++) q.push(a[i]);
	for(int i=r;i<n;i++)
	{
		auto t=q.top(); q.pop();
		ans+=t;
		t+=a[i];
		q.push(t);
	}
	cout<<ans;
	
	return 0;
}
2023东华大学OJ机试题22-70 东华大学计算机考研复试机试22 约瑟夫环223、整除的尾数24、回文质数25、汽水瓶26、阶乘最后的非0位27、算菜价28、 水果价格29、求奇数的乘积30、求最晚和最早日期31、素数32、计算e33 数字之和34 繁殖问题35 奇妙的数字36 整除的尾数37 黑色星期五38 树39 约瑟夫环40 最大与最小41 环42 求数列项43 最高频率44 三艘船45 回文数46 特殊四位数47 最大值48 数列149 修理牛棚50 按要求输出序列51 部落人乘法52 序列53 双重回文数54 等差数列55 人见人 阅读详情

相关推荐

东华大学2020考研计算机OJ题目解答分享——进阶篇(35)

35 最大值 作者: frankhuhu时间限制: 10S章节: 一维数组 问题描述 : 为了培养明明对数学的热爱,明明的爸爸经常想出一些简单有趣且富有数学思想的游戏给明明玩。有一次,明明的爸爸在纸上写了N个数字,有正整数、负整数和0。明明的爸爸给明明一个范围,他可以选大于等于L1个且小于等于L2个的数字(L1≤L2),且这些数字必须是连续的。但是要求明明选出的数的和最大,这样说明明可能不太明白,...

qq_38344326的博客 831

【东华oj】基础/进阶刷题

东华oj前言基础题1 求长方形的面积和周长2 数列和3 解方程4 一个月的天数5 银行存款到期日6 实数运算7 解二次方程8 门票价格计算9 星期几问题10 时间相加11 成绩转换12 求第几天13 求阶乘结果0的个数14 怪数15 abc数字16 奇妙的比值17 T的倍数N18 三角形19 数字串处理❤20 公式求解21 累加式22 约瑟夫环2 前言 本以为自己无多大希望,出成绩这一个月来一直忙于找工作与毕设,现在只剩不到一周了(事实上oj系统开启时间只剩三天了),这三天要好好刷题,之后准备面试的自我介绍

u013518977的博客 8152

东华大学(C++)OJ题目收集(代码详解版)

如需交流,请添加QQ好友 2636105163. 或可另外提供给你详细的出错样例信息。( 系统的测试样例不只是贴出来的一个测试样例。) 不过代码都是AC版本。需要声明的是,代码并非官方版本,而是自己当年写的,可能会存在不规范、效率不高、排版难看等问题。 仅供学习交流使用,若是抄袭,后果自负 Donghua University Online Judge 1.0 总共48道题目。基本是...

1万+

2023东华大学机试OJ 71-109题

东华大学计算机研究生复试题 71 发牌 题目描述:编制一个模拟发牌的程序。有编号为1,2,3,4四个人,将一付去掉大小怪的扑克按照如下顺序排列梅花c0-c12,方块d0-d12,红桃h0–h12,黑桃s0-s12,然后按照1,2,3,4四个人的顺序发牌,问最后每个人手上的牌有哪些。 思路:每次先输出第一章牌的花色和序号【梅花】】,输出一次就累加4,若数字大于12,则取模,发另一种类型的牌,直到发完13张 #include<stdio.h> //每个人都是隔4次发一张,可以用num表示牌的数字,直

m0_49263811的博客 3066

东华OJ复试刷题攻略与C语言考点解析

在线判题系统(OJ)是计算机专业考研复试的重要环节,通过模拟真实编程环境考察算法实现能力。其核心价值在于培养精准编程思维,要求代码一次性通过所有测试用例,这对数据类型转换、内存管理等底层细节提出严格要求。以C语言为例,运算符优先级、浮点数存储格式等知识点常成为失分重灾区。高效的OJ训练应结合防御性编程技巧,如输入缓冲区清理、断言检查等工程实践方法。东华大学OJ平台题目设计尤其注重边界条件检测,建议采用结构化训练模式,配合STL等工具提升解题效率。掌握这些技能不仅有助于复试,对日后开发中的调试排错也有显著帮助

weixin_34034670的博客 418

东华大学OJ系统算法训练:从LeetCode到复试机试的进阶之路

算法训练是计算机专业学生提升编程能力的核心路径,其本质是通过结构化练习培养计算思维。以动态规划和字符串处理为代表的经典算法,在编译器设计、算法分析等课程中具有重要应用价值。本文以东华大学OJ系统为例,详解如何通过高频次刻意练习构建算法思维体系,特别针对字符串处理、树形DP、贪心算法等高频考点设计训练方案。采用VS Code+Competitive Companion搭建的本地调试环境,配合测试用例生成脚本,可有效提升LeetCode到OJ系统的过渡效率。实践表明,遵循'1基础+1进阶+1挑战'的梯度训练原则

weixin_33849215的博客 426

东华oj基础题135(1-102题)

东华oj基础题1-102题

kay3123的博客 2500

东华大学2020考研计算机OJ题目解答分享——进阶篇(57)

57 数字游戏 作者: xxx时间限制: 1S章节: 递归 问题描述 : 现在,有许多给小孩子玩的数字游戏,这些游戏玩起来简单,但要创造一个就不是那么容易的了。 在这,我们将介绍一种有趣的游戏。 你将会得到N个正整数,你可以将一个整数接在另一个整数之后以制造一个更大的整数。 例如,这有4个数字123, 124, 56, 90,他们可以制造下列整数─ 1231245690, 1241235690, ...

qq_38344326的博客 750

东华复试OJ每日3题打卡·复盘7~9

但团体可以优惠,分为以下情况:人数超过20,则所有人优惠10%;输出一个实数,即该团体需要支付的总票价,精确到小数点后2位。基础9:根据一个范围在0至6的整数,用英文输出它对应的是星期几。(0对应Sunday,1对应Monday, 2对应Tuesday, 3对应Wednesday, 4对应Thursday, 5对应Friday, 6对应Saturday)基础8:编写程序求方程ax2+bx+c=0的根,a、b、c的值由键盘输入,假设b2-4ac>0。两个根,大数在前,小数在后输出时保留两位小数。

weixin_45887261的博客 237

AD2S1210与DSP28335 SPI通信中的GPIO配置陷阱与解决

本文深入剖析了AD2S1210与DSP28335进行SPI通信时,因GPIO输入限定配置不当导致数据整体右移的典型问题。文章指出,错误地将MISO引脚配置为带采样周期的同步模式是根本原因,并提供了将输入选择限制正确设置为异步模式的解决方案。同时,总结了不同应用场景下GPIO输入限定的配置原则,为高速同步通信的稳定实现提供了关键指导。

weixin_29163857的博客 146

Eclipse 数据空间组件(EDC)项目介绍

在当今数字经济的背景下,数据成为了新的“石油”。但与石油不同的是,数据可以无限共享且再生。然而,如何在保持数据主权的前提下实现高效、安全的数据共享,成为了企业和组织面临的主要挑战。这时,**Eclipse 数据空间组件(Eclipse Dataspace Components, EDC)**应运而生,它为企业在多方参与的数据交换中提供了一个标准化、可扩展的解决方案。数据空间不仅是一个多组织间的数据共享协议,还是一套支撑这些协议运行的技术基础设施。

m0_74331272的博客 4598

东华OJ--7~9

运用数学基本的解一元二次方程的方法,x= (-b+-(b*b-4ac))/2a,可得两个x,最后记得大数在前,小数在后,时保留两位小数。

ls688hh的博客 303

从RADIUS服务器到AP:实战搭建一个小型WPA2-Enterprise测试环境(FreeRADIUS + 家用路由器)

本文详细介绍了如何从零搭建WPA2-Enterprise测试环境,使用FreeRADIUS服务器和家用路由器实现企业级WiFi认证。通过实战指南,包括证书生成、EAP-PEAP配置、OpenWrt路由器设置及故障排查,帮助网络工程师和爱好者掌握802.1X协议栈的实际应用。

weixin_28715953的博客 325

东华oj基础7-9题

根据一个范围在0至6的整数,用英文输出它对应的是星期几。(0对应Sunday,1对应Monday, 2对应Tuesday, 3对应Wednesday, 4对应Thursday, 5对应Friday, 6对应Saturday)输出一个字符串,即输入n对应的星期几的英文名称,请注意大小写。输出一个实数,即该团体需要支付的总票价,精确到小数点后2位。输入一个整数i(0≤i≤1,000),表示一个团体的总人数。编写程序求方程ax2+bx+c=0的根,a、b、c的值由键盘输入,假设b2-4ac>0。

2503_91751263的博客 56

如何用谷歌插件Apollo.io高效开发客户?手把手教你避开常见坑点

本文详细介绍了如何利用谷歌插件Apollo.io高效开发外贸客户,包括核心功能解析、免费额度最大化利用策略、多插件协同技巧以及常见陷阱规避方法。通过Apollo.io的智能匹配算法和庞大数据库,外贸从业者可以精准锁定目标客户,提升开发效率。

banana的博客 885

Java对接海康威视明眸门禁设备

海康威视合作生态致力打造一个能力开放体系、两个生态圈,Hikvision AI Cloud开放平台是能力开放体系的核心内容。它是海康威视基于多年在视频及物联网核心技术积累之上,融合AI、大数据、云计算等技术,为合作伙伴提供的一个二次开发及创新的平台。的SDK复制到linux的lib目录下(如果是docker发布,记得做好共享映射哦)大家有没有想过,windows版的SDK为什么要复制到项目根目录的lib文件夹下?所以发布到linux的时候,我们需要将。打开AcsMain文件。................

Good Luck 7875

东华oj自用 6-10

输入两个实数,求它们的和,差,积,商。

foolgod_0的博客 467

【国密】基于SM2的协同签名与协同解密方案

两方协同签名指客户端与服务端协同完成签名、验签操作,具体实现方案参考了信工所专利[3]。在业务应用中,两方或多方的协同签名一般采用门限签名方案可以用来构造。门限密码算法在多方协作的相关场景中应用十分广泛,可以实现数据联合授权、认证、密钥安全恢复、密钥安全交换等需求,在诸多分布式多方计算协议中均可见其身影。在上述两方协同签名方案中,最巧妙的地方在于签名值s分量的构造,通过一些列数学变换,得以恢复。以下从两方协同签名方案介绍入手,介绍门限密码在协同签名中的应用。解决上述问题的关键在于门限密码算法的巧妙构造。

听雨草堂 8388

东华oj-进阶题第27题

27 约瑟夫环 作者: ZhouMingLiang时间限制: 10S章节: 一维数组 问题描述 : 有一次,明明的公司举行忘年会。忘年会的高潮部分是最后的抽大奖环节。公司为了增加活动的气氛,并没有按传统的抽奖方式来抽,而是进行了一个游戏:逐步逐步地淘汰人,而最后剩下的人,将会得到大奖。 这个游戏的方式如下:首先公司的全部职员围成一个圈,然后确定一个淘汰数X,接着就从其中的一个人开始,从1数数,...

qq_41409120的博客 538

国科大学习资料--VLSI测试与可测试设计--2020期末考试试题

国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 一、概念题 1简述可测试性测度与两个主要的测度指标的含义; 2以March C-算法为例,说明March算法的构成,以及March C-算法的故障覆盖率; 3“效果-原因”诊断法和“原因效果诊断法”的不同; 4列举四条扫描设计时出现的问 题及解决办法; 5最少写出1149.1与1500的五点不同; = = = = =

无名何许人的博客 1150

华为OD机试真题 新系统 9月27号 【数据中心最佳维护窗口】

华为OD机试真题 新系统【数据中心最佳维护窗口】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【数据中心最佳维护窗口】多语言题解。

qq_45776114的博客 1154

东华oj-进阶题第12题

12 奇妙的比值 作者: 孙辞海 时间限制: 10S章节: 循环 问题描述 : 明明喜欢钻研各种各样的数学问题。一天,明明对数的因子产生了兴趣,他想把一个数的所有因子都找出来,然后把它们相加再去除以这个数,这样会得到一个比值。明明想看看不同的数的该比值会有什么不同,以便做研究。 例如6这个数,它一共有4个因子,分别是:1、2、3、6,把他们相加然后再除以6,即1+2+3+6=12,12/6=2,...

qq_41409120的博客 513

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

东华oj-进阶题第61题-螺旋方阵

61 螺旋方阵 作者: 孙辞海 时间限制: 1S章节: 二维数组 问题描述 : 明明在上学的时候,参加数学兴趣班。在班上,老师介绍了一种非常有趣的方阵,称之为螺旋方阵。该方阵一共由n×n个正整数构成(我们称之为n阶螺旋方阵),即共有n行n列。 方阵中的数字从1开始递增,数字的排序规则是从左上角出发由1开始排序,并按顺时针方向旋进,即先排最外面的一圈,然后排里面的一圈,以此类推,直到排到最后一个...

qq_41409120的博客 1274

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

东华OJ 基础题77 螺旋方阵

为了降低构造方阵的出错率,提高构造速度,明明就求助于你,请你帮他写一个程序,来构造螺旋方阵。对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行仅有一个正整数n(1≤n≤10),即所要构造的螺旋方阵的阶数。方阵中的数字从1开始递增,数字的排序规则是从左上角出发由1开始排序,并按顺时针方向旋进,即先排最外面的一圈,然后排里面的一圈,以此类推,直到排到最后一个数为止。

laole_ye的博客 688

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

东华OJ进阶题27 约瑟夫环

27 约瑟夫环 作者: ZhouMingLiang时间限制: 10S章节: 一维数组 问题描述 : 有一次,明明的公司举行忘年会。忘年会的高潮部分是最后的抽大奖环节。公司为了增加活动的气氛,并没有按传统的抽奖方式来抽,而是进行了一个游戏:逐步逐步地淘汰人,而最后剩下的人,将会得到大奖。 这个游戏的方式如下:首先公司的全部职员围成一个圈,然后确定一个淘汰数X,接着就从其中的一个人开始,从1数数,当数...

fxwentian的博客 535

东华OJ 基础题28 水果价格

具体格式参照样例输出:第一行apple前为7个空格,之后为2个空格,其他水果名后都是1个空格,sum后没有空格;第二行price后有2个空格,其后关于价格的表示多为占7格2位小数且左对齐,但其中pineapple为占10格2位小数且左对齐,注意sum的价格仍然占7格,如第一组样例中的54.60后还有2个空格;一家水果店出售四种水果,每公斤价格的苹果(代码为a)1.5元,橘子(代码为o)1.4元,香蕉(代码为b)1.48元,菠萝(代码为p)1.08元。在接下来的m行中,每行输入两个值d,g。

laole_ye的博客 610
上一篇: [蓝桥杯] 网络寻路
下一篇: 东华oj 80道(41~60题)
Jay_fearless
博客等级 码龄7年 4514粉丝 559原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Jay_fearless

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

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

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

打赏作者

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

抵扣说明:

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

余额充值