【无标题】

在这里插入图片描述

#include<iostream>
#include<cmath>
using namespace std;

int prime(int x)
{
	int i;
	for(i=2;i<=sqrt(x);i++)
	{
		if(x%i==0) return 0;
	}
	return 1;
}

int main()
{  
	int n;
	while(cin>>n)
	{
		cout<<n<<"=";
		int j=2;
		while(n!=1)
		{
			if(n%j==0 && prime(j))
			{
			    cout<<j;
			    n=n/j;
			    if(n != 1) 
					cout<<"*";
				else cout<<endl; 
				       	
			}
			else j++;
		}
		
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;

int cmp(int x,int y)
{
    
	return x>y;
}

int main()
{
	int n,i,m,a[1011],b[1011];
	while(cin>>n)
	{
    
		for(i=0;i<n;i++)
		{
    
			cin>>a[i];
			b[i]=a[i];
		}
		     
		sort(b,b+n,cmp);
		int flag=0,ans=0; 
		for(i=0;i<n-1;i++)
		{
    
			if(b[i+1]!=b[i]) 
			{
    			flag=1;
				cout<<b[i+1];
				ans=b[i+1];
				break;
			}
		}
		if(flag==0)
			cout<<"none"<<endl;
		else 
		{
			for(i=0;i<n;i++)
			{
    
				if(a[i]==ans)
				{
    
					cout<<" "<<i;
				}
			}
			cout<<endl;
		}
	}
	return 0;
}

在这里插入图片描述

#define MAX 20002
#include <iostream>
#include <algorithm>
using namespace std;

int dragon[MAX],knight[MAX];
void init(){
    for(int i=0;i<MAX;i++){
        dragon[i]=0;
        knight[i]=0;
    }
}
//贪心,先升序排序,一个骑士只能砍一个头并且仅能被雇佣1次。
int main(){
    int n,m;
    while(cin>>n>>m){
        init();
        for(int i=0;i<n;i++){
            cin>>dragon[i];
        }
        for(int i=0;i<m;i++){
            cin>>knight[i];
        }
        sort(dragon,dragon+n);
        sort(knight,knight+m);
        int sum=0,d_idx=0,k_idx=0;
        while(d_idx<n&&k_idx<m){
            if(dragon[d_idx]<=knight[k_idx]){
                sum+=knight[k_idx];
                d_idx++;
                k_idx++;
            }else{
                k_idx++;
            }
        }
        if(d_idx<n){
            cout<<"Lose!"<<endl;
        }else{
            cout<<sum<<endl;
        }
    }
}

在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int main(){
	int n,k=1,i,j,temp;
	int a[20][20];
	cin>>n;
	for(i=0;i<n;i++){      //看好!i是从0开始的; 
		for(j=0;j<n;j++){
			a[i][j]=k;            //先把数存起来; 
			k++;
		}
		
		if(i%2==1){              //每个奇数行都换过来; 
			for(j=0;j<n/2;j++){
				temp=a[i][j];
				a[i][j]=a[i][n-1-j];
				a[i][n-1-j]=temp;
			}
		}
	}
	
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			printf("%4d",a[i][j]);   //占四个字节; 
		}
		cout<<endl;
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<stdlib.h>/*11 单词统计*/
#include<cstring>
#include<cstdio>
using namespace std;
int main(){
	
	int n,i,len,count;
	char a[51];
	
	cin>>n;
	getchar();       //要删掉一个换行; 
	while(n--)
	{
		gets(a);
		len=strlen(a);
		count=0;
		for(i=0;i<len;i++)
		{
			if(a[i]!=' '&&a[i+1]==' ')    //只要一个有一个没有就好了; 
				count++;
		}
		if(a[len-1]!=' ')  //再加上最后一个单词的情况; 
			count++;
		cout<<count;
		if(n!=0) cout<<endl;
	}
	return 0;
}

在这里插入图片描述

/*14 转换成十进制*/

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;

int main()
{

    string str;
	int m,n,i;
	while(cin>>n>>str)
	{
		
		int len=str.length();
		//cout<<len<<endl;
		int sum=0,k=0;      //k在这里也很重要; 
		for(i=len-1;i>=0;i--,k++)
		{	
			if(str[i] >='A' && str[i]<='J')
			      sum+=pow(n,k)*(str[i]-55);
			else  
			{
				sum+=pow(n,k)*(str[i]-'0');
			}
		}
		cout<<sum<<endl;
	}
	return 0;
}


在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
#include<string.h>
#include<ctype.h>
void trans(int a,int b,char res[]){
	int i,temp;
	i=0;
	if(a>0){
		while(a>0){
			temp=a%b;
			if(temp>9){
				res[i++]=temp-10+'A';
			}
			else{
				res[i++]=temp+'0';
			}
			a/=b;
		}
		res[i]='\0';
		strrev(res);
		puts(res);
	}
	else  //如果整数位0的特殊情况
		printf("0\n");
}
int main(){
	char str[101];
	int n,m;
	while(scanf("%d%d",&n,&m)!=EOF){
		trans(n,m,str);
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
#include<cstring>
#include<iostream>
#include<string.h>
using namespace std;
#define max 1000

//返回str中从start位置开始的len个字符
void getsub(string str,int start,int len,char subs[]){
	int i,j=0;
	for(i=start;i<start+len;i++)
		subs[j++]=str[i];
	subs[j]='\0';                  //存到sub里; 
}

int main(){
	int i,j,k;
	string a,b; 
	char c[max],sub[max]={0};
	while(cin>>a){
		memset(sub,0,sizeof(sub));
		cin>>b;
		for(i=0;i<a.length();i++){
			for(j=0;j<b.length();){
				while(a[i]!=b[j]&&b[j]!='\0')
					j++;                         //直接暴力呀!! 
				if(b[j]=='\0')
					break;
				else{
					k=0;
					while(a[i+k]==b[j+k]&&a[i+k]!='\0'&&b[j+k]!='\0')
						k++;
					getsub(b,j,k,c);
					if(strlen(c)>strlen(sub)||(strlen(c)==strlen(sub)&&strcmp(c,sub)<0))
						strcpy(sub,c);        //判断sub; 
					j++;
				}
			}
		}
		puts(sub);
		//memset(a,0,sizeof(a));
	}
	return 0;
}


在这里插入图片描述
在这里插入图片描述

#include<iostream>
using namespace std;
int main(){
    long long i,n,ans=0,x;
    cin>>n;
    for(i=1;i<=n;i++){
        x=i;
        while(x>1)
            ans=max(ans,x=x%2?(x*3+1):(x/2));
    }
    cout<<ans;
    return 0;
} 

在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
#include<cstring>
#include<iostream>
#include<string.h>
using namespace std;
#define max 1000

int main(){
	int i,n,a,b;
	cin>>a>>b>>n;
	while(a>b){
		a=a%b;
	}
	i=0;
	while(i<=n+2){
		a=a*10;
		i++;
		if(i>=n&&i<=n+2){
			cout<<a/b;
		}
		a=a%b;
	}
	cout<<endl;
	return 0;
}


在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<limits.h>
using namespace std;
int pIndex[101],Ugly[100005];
void Ugly_Num(int* Prime,int K,int N)
{
	int i,j,min,minIndex;
	for(i=0;i<K;++i)
		pIndex[i]=0;//初始化为0,因为初始状态第i个状态已经乘到0位,0位的值是1
	Ugly[0]=1;
	for(i=1;i<=N;)//找出从1到N的丑数,太暴力了,提示:注意第3位置留空!!!
	{
		min=INT_MAX;
		for(j=0;j<K;++j)//找到最小值,K个素数分别和之前的丑数相乘求出最小的那一个
		{
			//(j,pIndex[j])表示第j个素数已经乘到了第pIndex[j]位了,比如说8=2*4,2是第0个素数,4是第3位,则pIndex[0]=3
			//下一次,prime[j]乘pIndex[j]+1位就可以了,因为再乘之前的也只会比这小
			if(Prime[j]*Ugly[pIndex[j]] < min)
			{
				min=Prime[j]*Ugly[pIndex[j]];
				minIndex=j;//最小的素数索引
			}
		}
		if( min != Ugly[i-1]) //如果和之前的不一样,更新之,否则只更新相乘的位,因为下一次对应的素数要乘更大的丑数
			Ugly[i++]=min;
		++pIndex[minIndex];//素数索引
	}
	cout<<Ugly[N]<<endl;
}
 
int main()
{
	int prime[4]={2,3,5,7};
	Ugly_Num(prime,4,19);
}

在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int prime(int x)
{
	if(x<2)
		return 0;
	for(int i=2;i<=sqrt(x);i++)
	{
		if(x%i==0)
			return 0;
	}
	return 1;
}
int main()
{
	char s[101];
	int max,min,ans,flag,a[26];
	scanf("%s",s);
	int len=strlen(s);
	memset(a,0,sizeof(a));
	for(int i=0;i<len;i++)
		a[s[i]-'a']++;
	sort(a,a+26);
	for(int i=0;i<26;i++)
	{
		if(a[i])
		{
			min=a[i];
			break;
		}
	}
	ans=a[25]-min;
	if(prime(ans))
	{
		printf("Lucky Word\n");
		printf("%d\n",ans);
	}
	else
	{
		printf("No Answer\n");
		printf("0\n");
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<map>
#include<string>
using namespace std;
int main() {
    string s;
    int n;
    cin >> n >> s;
    int len = int(s.length());
    map<string, int > cp;
    int ans_num = 0;
    string ans;
    for (int num = n; num <= len; num++) {
        cp.clear();
        for(int i = 0; i <= len - num; i++) {
            cp[s.substr(i, num)]++;
        }
        string tem = "";
        string tem_s = "";
        int tem_num = 0;
        for(int i = 0; i <= len - num; i++) {
            tem = s.substr(i, num);
            if (tem_num < cp[tem]) {  //选出现最早的,所以后面出现的次数相同不用更新这里的小于很关键,不可以是小于等于
                tem_num = cp[tem];
                tem_s = tem;
            }
        }
        if(tem_num >= ans_num) { //次数相同,选长度大的。这里的大于等于很关键,不可以是大于
            ans_num = tem_num;
            ans = tem_s;
        }

    }
    cout << ans;
    return 0;
}

在这里插入图片描述
在这里插入图片描述

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

char s1[100],s2[100];
int a[100],b[100];

int main()
{
	scanf("%s %s",s1,s2);
	int len1 = strlen(s1);
	int len2 = strlen(s2);
	
	int i;
	if(len1 != len2){
		cout<<"N"<<endl;
	}else{
		for(i=0; i<len1; i++){
			if(s1[i]>='A' && s1[i]<='Z') a[i]=s1[i]-'A';
			else a[i]=s1[i]-'a';
		}  
          
    	for(i=0; i<len2; i++){
			if(s2[i]>='A' && s2[i]<='Z') b[i]=s2[i]-'A';
			else b[i]=s2[i]-'a';
		} 
		
		sort(a,a+len1);
		sort(b,b+len2);
		
		for(i=0;i<len1;i++){
			if(a[i] != b[i]){
				break;
			}
		}
		if(i == len1) cout<<"Y"<<endl;
		else cout<<"N"<<endl;
	}
	
	
	return 0;
} 

在这里插入图片描述
在这里插入图片描述

/*
1、把15位身份证号码中的年份由2位(7,8位)改为四位;
2、最后添加一位验证码。验证码的计算方案:
  将前 17 位分别乘以对应系数 (7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2)
   并相加,然后除以 11 取余数,0-10 分别对应 1 0 x 9 8 7 6 5 4 3 2。
*/
#include<stdio.h>
int xishu[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char duiying[17]={"10x98765432"};
int main(){
    char num1[18];
    int num2[18];
    int sum=0;
    scanf("%s",num1);
    /*将数位往后移两位*/
    for(int i=15;i>=6;i--){
        num1[i+2]=num1[i];
    }
    num1[6]='1';
    num1[7]='9';
    for(int i=0;i<17;i++){
        num2[i]=num1[i]-'0';
        sum+=num2[i]*xishu[i];
    }
    sum%=11;//除以11取余数
    num1[17]=duiying[sum];
    num1[18]='\0';
    printf("%s",num1);

}

在这里插入图片描述
在这里插入图片描述

#include<iostream>

using namespace std;
int book[31];
int ans[8];
int main() {
    int n, key, cnt;
    cin >> n;
    for (int i = 1; i <= 7; i++) {
        cin >> key;
        book[key] = 1;
    }
    while (n--) {
        cnt = 0;
        for (int i = 1; i <= 7; i++) {
            cin >> key;
            if (book[key] == 1) {
                cnt++;
            }
        }
        ans[7 - cnt]++;
    }
    for (int i = 0; i <= 6; i++) {
        cout << ans[i] << " ";
    }
    return 0;
}

在这里插入图片描述
在这里插入图片描述

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

int sushu(int x){
	int i;
	for(i=2;i<=sqrt(x);i++){
		if(x%i==0)
			return 0;
	}
	return 1;
}
int main()
{
	int n,num,i,flag;
	scanf("%d",&n);
	while(n--){
		flag=1;
		cin>>num;
		for(i=2;i<=sqrt(num);i++){
			if(num%i==0){
				if(sushu(i)&&sushu(num/i)){
					cout<<"Yes"<<endl;
					flag=0;
					break;
				}
			}
		}
		if(flag){
			cout<<"No"<<endl;
		}
	}
	
	
	return 0;
} 

在这里插入图片描述
在这里插入图片描述

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


int main()
{
	char num1[10001];
	char num2[10001];
	int res[20002]={0};
	int up=0,i,j,k,len1,len2,num=-1;
	cin>>num1>>num2;
	len1=strlen(num1);
	len2=strlen(num2);
	for(i=len1-1;i>=0;i--){
		num++;
		k=num;
		for(j=len2-1;j>=0;j--){
			up=up+(num1[i]-'0')*(num2[j]-'0')+res[k];
			res[k++]=up%10;
			up=up/10;
		}
		while(up!=0){
			res[k++]=up%10;
			up/=10;
		}
	}
	for(k=k-1;k>=0;k--)
		cout<<res[k];
	
	return 0;
} 

在这里插入图片描述

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

int main()
{
	int res[20002]={0};
	int up=0,i,j,k,len1,len2,num=-1;
	int n,len;
	cin>>n>>len;
	j=0;
	res[0]=1;
	for(i=2;i<=n;i++){
	    up=0;
	
		for(k=0;k<=j;k++){
			int temp=res[k]*i+up;
			res[k]=temp%10;
			up=temp/10;
		}
		while(up!=0){
			j++;
			res[j]=up%10;
			up/=10;
		}
	}
	
	for(i=len-1;i>=0;i--)
		cout<<res[i];
	
	return 0;
} 

在这里插入图片描述
在这里插入图片描述

#include<cstdio>
using namespace std;
#define MAXN 10010
int alone[MAXN];
int main(){

    int N;
    int k;
    int sum;
    scanf("%d", &N);

    for(int i = 1; i <= N; ++i){
        k = i;
        sum = i;
        while(k){
            sum += k % 10;
            k /= 10;
        }
        alone[sum] = 1;
    }
    for(int i = 1; i < N; ++i){
        if(alone[i] == 0)
            printf("%d\n", i);
    }
    return 0;
}

在这里插入图片描述
在这里插入图片描述

#include<iostream>
using namespace std;
int main(){
     int Se[1002];
     int loc;
     int n, k;
     int temp;
     int num;
     while (cin >> k >> n){
           loc = 0;
           num = 1;
           while (loc < n){
                temp = loc;
                Se[loc++] = num;
                for (int i = 0; i < temp&&loc<n; i++)
                     Se[loc++] = num + Se[i];
                num *= k;
           }
           cout << Se[n - 1];
     }
     return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
#include<math.h>
#include<time.h>
int isprime(int num)
{
	if(num<2)
		return 0;
	for(int i=2;i<=sqrt(num);i++)
	{
		if(num%i==0)
			return 0;
	}
	return 1;
}
int main()
{
	int n,i,k;
	while(~scanf("%d",&n))
	{
		if(n<0)
			break;
		k=0;
		for(i=2;(i+2)<=n;i++)
		{
			if(isprime(i)&&isprime(i+2))
			{
				k++;
			}
		}
		printf("%d\n",k);
	}

	return 0;
}

在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
int cmp(const void*_a,const void*_b)//从大到小排序
{
	int *a=(int *)_a;
	int *b=(int *)_b;
	return *b-*a;
}

int main()
{
	int *a;
	int n,m,i,j;
	scanf("%d",&n);
	a=(int *)malloc(sizeof(int)*n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	scanf("%d",&m);
	for(i=0;i<m;i++)
	{
		int l,r,k,p=0;
		int *temp;
		scanf("%d%d%d",&l,&r,&k);
		temp=(int *)malloc(sizeof(int)*(r-l+1));
		for(j=l-1;j<r;j++)//把第l个到第r个的元素都提取出来,存在temp数组中,然后从大到小排序之后就简单多了
		{
			temp[p++]=a[j];
		}
		qsort(temp,p,sizeof(int),cmp);
		printf("%d\n",temp[k-1]);
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
int a[1000000];
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
        int temp;
        scanf("%d",&temp);
        a[temp]++;
    }
    int i;
    for(i=0;i<1000000;i++)
    {
        if(a[i]!=0)
            printf("%d %d\n",i,a[i]);
    }
    return 0;
}

在这里插入图片描述
在这里插入图片描述

/*用数组来存储数字的各个数位,再借助排序方法得到由这几个数位组成的最大数和最小数
*/
 
 
#include<iostream>
#include <algorithm>             //包含sort()函数,sort()函数--默认从小到大排序
 
using namespace std;
 
void fun(int n, int a[]);        //将一个数字的各个数位从高到低依次存入一个数组中去
bool compare(int a, int b);      //编写的sort函数的参数,以完成从大到小的排序
int maxNum(int a[]);             //各个数位从大到小排列所组成的数
int minNum(int a[]);             //各个数位从小到大排列所组成的数
 
int main() {
	int n, a[4];
	int max, min;               
	cin >> n;
 	int count=0; 
	while (1) {
		fun(n, a);
		max = maxNum(a);
		min = minNum(a);		
		n = max - min;

		count++;
		if (n == 6174)
			break;
			
	}
	cout<<count;
	return 0;
}
 
void fun(int n,int a[]) {
	int i = 3;
	while (n > 0) {
		a[i] = n % 10;
		n = n / 10;
		i--;
	}
	while (i > -1) {    //处理位数小于4位的情形,不足4位的用0填充
		a[i] = 0;
		i--;
	}
}
 
bool compare(int a, int b) {
	return a > b;
}
 
int maxNum(int a[]) {
	sort(a, a + 4, compare);
	return a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
}
 
int minNum(int a[]) {
	sort(a, a + 4);
	return a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
}

在这里插入图片描述
在这里插入图片描述

#include <iostream>
#define MOD 50000
using namespace std;
int v[2000000];
int main() {
    int n;
    cin >> n;
    for(int i = 2; i * i < 2000000; i++) {//筛法选质数
        if(v[i] == 1)
            continue;
        for(int j = i * i; j < 2000000; j = j + i)
            v[j] = 1;
    }
    long long int ans = 1;
    int cnt = 0;
    for(int i = 2; i < 2000000; i++) {
        if(v[i] == 0) {
            ans = (ans * i) % MOD;
            cnt++;
        }
        if(cnt == n) break;
    }
    cout << ans;
    return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 200+5;
int a[N][N];
int r, c;
int solve(){
	for(int len = min(r,c); len >= 1; len--){
		for(int i = 0; i < r && i+len <= r; i++){
			for(int j = 0; j < c && j+len <= c; j++){
				int color = a[i][j];
				for(int x = 0; x < len; x++){
					for(int y = 0; y < len; y++){
						if(a[i+x][j+y] != color){
							color = -1;
							break;
						} 
					}
				}
				if(color != -1)  return len*len;
			}
		}
	}
	return 0;
} 
 
int main(int argc, char** argv) {
	scanf("%d%d",&r, &c);
	for(int i = 0; i < r; i++)
		for(int j = 0; j < c; j++)
			scanf("%d",&a[i][j]);
	printf("%d", solve());
	return 0;
}

在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
int main(){
	int N,x;
	while(scanf("%d%d",&N,&x)!=EOF){
		int a[100];
		int i,k=1;
		for(i=1;i<=N;i++)
			a[i]=i;
		for(i=N;i>=1;i--){
			k=(k+x-1)%i;
			if(k==0)
				k=i;//因为编号从1开始,若k==0  那么k==i
			if(i>1)
				printf("%d ",a[k]);
			else printf("%d",a[k]);
			for(int j=k;j<i;j++)
				a[j]=a[j+1];//向前移位 
		}
		printf("\n");
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述

#include <stdio.h>  
  
int main()  
{  
    int n, a, b, sum;  
      
    scanf("%d", &n);  
      
    a = 1;  
    b = a + 1;  
    sum = 0;  
    while(b != a+1 || sum < n){  
          
        if(sum < n){  
            b ++;  
        }else{  
            a ++;  
            b = a + 1;  
        }  
        sum = (a + b) * (b - a + 1) / 2;  
        if(sum == n){  
            printf("%d %d\n", a, b);  
        }  
    }  
      
    return 0;     
}  
#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    int *a = new int [n+1];
    a[0] = 0;
    for(int i = 1; i <= n; i++) {
        a[i] = a[i-1] + i;
    }
    for(int i = 0; i <= n-2; i++) {
        for(int j = i+1; j <= n; j++) {
            if((a[j] - a[i]) == n) {
                cout << i+1 << " " << j << endl;
            } else if((a[j] - a[i]) > n) {
                break;
            }
        }
    }
    return 0;
}

在这里插入图片描述
在这里插入图片描述

#include <iostream>
#include <cstring>
using namespace std;
 
int main()
{
    string s1,s2;
    int count = 0; //记录次数
    cin >> s1 >> s2; // 输入
    for(int i = 0; i < s1.size() - 1; i++) //从第一位开始循环遍历,到倒数第二个字符结束
    {
        if(s1[i] != s2[i]) //如果遇到不相同的字符,则翻转后两位字符
        {
            count++;
            if(s1[i] == 'o') s1[i] = '*';
            else s1[i] = 'o';
            if(s1[i + 1] == 'o') s1[i + 1] = '*';
            else s1[i + 1] = 'o';
        }
    }
    cout << count << endl; //遍历完成,输出
}

在这里插入图片描述
在这里插入图片描述

#include<cstdio>
const int N=1e2+5;
int main()
{
    int numa[N],sum=0,num,temp,n;
    scanf("%d",&n);//输入人数
    for(int i=1;i<=n;i++)
        scanf("%d",&numa[i]);//输入每个人的糖果数量
    while(1){
        num=1;
        for(int i=2;i<=n;i++)//只要前后者任意一个不相等就是全局不等
            if(numa[i]==numa[i-1])num++;
            else    break;
        if(num==n)break;//如果每组对比相等数量与人数相等就是全局相等
        for(int i=1;i<=n;i++)numa[i]/=2;//每人糖果数减半
        temp = numa[1];
        for(int i=1;i<n;i++)//前者加上后者的糖果数
            numa[i]+=numa[i+1];
        numa[n]+=temp;
        for(int i=1;i<=n;i++)//查找含有奇数个糖果的人,把他们变为偶数
            if(numa[i]%2==1){numa[i]++;sum++;}
    }
    printf("%d\n",sum);
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<cstdio>
#include<iostream>
using namespace std;
string getS(char c) {
	if (c == '0') return "1";
	return "01";
}
int main() {
	int n;
	scanf("%d", &n);
	string s = "0";
	string s1 = "";
	if (n != 0) {
		while(n--) {
			int len = s.size();
			s1 = "";
			for (int i = 0; i < len; i++) {
				s1 += getS(s[i]);
			}
			s = s1;
		}
		cout << s1 << endl;
	}
	else cout << s << endl;
	return 0;
}

在这里插入图片描述
在这里插入图片描述

using namespace std;

string s[100005];
bool cmp(string a,string b){
    string s1 = a.substr(6,8);
    string s2 = b.substr(6,8);
    if(s1 != s2){
        return s1>s2;
    }else{
        return a>b;
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        s[i].resize(18);            //预先分配空间
        scanf("%s",&s[i][0]);       //读入string
        //cin>>s[i];
    }
    sort(s,s+n,cmp);
    for(int i=0;i<n;i++){
        printf("%s\n",s[i].c_str());//输出必须用.c_str()
        //cout<<s[i]<<endl;
    }
    return 0;
}

在这里插入图片描述
在这里插入图片描述

#include <iostream>
#include <string>

using namespace std;

int radix, n, sum, a[1001];//定义变量进制数,输入字符串长度,总步数,字符串存放的整数数组
string s;

//判断是否是回文数
bool palindromic(int n)
{
	for (int i = 1; i <= n / 2; i++)
		if (a[i] != a[n - i + 1])
			return false;
	return true;
}

//两数相加
int add(int n)
{
	int c[1001] = { 0 };//定义临时数组,表示两数的和
	for (int i = 1; i <= n; i++)//进制数相加
	{
		c[i] = a[i] + a[n - i + 1] + c[i];
		c[i + 1] += c[i] / radix;
		c[i] %= radix;
	}
	if (c[n + 1])//保留进位
		n++;
	for (int i = n; i >= 1; i--)
	{
		a[i] = c[i];
	}
	return n;
}

int main()
{
	cin >> radix >> s;
	n = s.size();
	for (int i = 1; i <= n; i++)//将字符串转化为整数数组
	{
		if (s[i - 1] < 65)
			a[i] = s[i - 1] - '0';
		else
			a[i] = s[i - 1] - 55;

	}
	while (sum <= 30)
	{
		if (palindromic(n))
		{
			cout << "STEP=" << sum << endl;
			return 0;
		}
		sum++;
		n = add(n);
	}
	cout << "Impossible!" << endl;
	return 0;
}

在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<cstring>
using namespace std;
struct tstudent
{
    string name;
    string num;
    char sex;
}student[1010];

int findstudent(struct tstudent student[], int n, string data)//判断是否有某个学生的学号或名字等于data,如果有,函数返回该学生在student数组中的序号,否则返回-1
{
    int i;
    if(data=="")
        return -1;
    for(i=0;i<n;i++)
    {
        if(student[i].name==data||student[i].num==data)
            return i;
    }
    return -1;
}
void solve(struct tstudent student[], int n, int m)//输入两个人的信息X、Y。通过调用findstudent函数判断这两个人能否成为舞伴
{
    string x,y;
    int a,b;
    for (int i=0; i<m; i++)
    {
        cin>>x>>y;
        a=findstudent(student,n,x);
        b=findstudent(student,n,y);
        if(a==-1||b==-1)
            return;
        else
        {
            if(student[a].sex!=student[b].sex)
                cout<<"Y"<<endl;
            else
                cout<<"N"<<endl;
        }

    }
}

int main()
{
    int n, m;
    cin>>n;
     int i;
    for(i=0;i<n;i++)
    {
        cin>>student[i].name>>student[i].num>>student[i].sex;
    }
    
    cin>>m;
    solve(student,n,m);
    return 0;
}


在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
struct student
{
	string name;
	int sorce=0,id;
};
int cmp(student a, student b)
{
	if (a.sorce == b.sorce)//当分数相等时,编号小的排前面
		return a.id < b.id;
	return a.sorce > b.sorce;//分数不等,分高的排前面
}
int main()
{
	int n, m;
	cin >> n;
	vector<student>arr(n);
	for (int i = 0; i < n; i++)
	{
		cin >> arr[i].name;
		arr[i].id = i;
	}
	string t;
	int sorce,cnt=0,s=1;
	cin >> m;
	for (int i = 0; i < m*n; i++)
	{
		cin >> sorce >> t;
		cnt++;
		for (int j = 0; j < arr.size(); j++)
		{
			if (arr[j].name == t)
			{
				arr[j].sorce += sorce;
				break;
			}
		}
		if (cnt == n)//输入n次,代表一次考试
		{
			s = 0;
			cnt = 0;
			sort(arr.begin(), arr.end(), cmp);//排序
			for (int j = 0; j < arr.size(); j++)
			{
				if (arr[j].name == "DaDa")
				{
					cout << j+1 << endl;
					break;
				}
			}
		}
	}
    return 0;
}

在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<vector>
using namespace std;
struct  ditan
{
	int a, b, g, k,num;
};
int main()
{
	int n,x,y,num=0;
	cin >> n;
	vector<ditan>arr(n + 1);
	for (int i = 1; i <= n; i++)
	{
		cin >> arr[i].a >> arr[i].b >> arr[i].g >> arr[i].k;
		arr[i].num = i;
	}
	cin >> x >> y;
	for (int i = 1; i <= n; i++)
	{
		if (x >= arr[i].a&&x <= arr[i].a + arr[i].g&&y >= arr[i].b&&y <= arr[i].b + arr[i].k)
			num = arr[i].num;
	}
	if (num == 0)
		cout << -1;
	else
		cout << num;
	return 0;
}

在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i,j,k,m,n,t,a[10],b[10];
    scanf("%d",&m);
    for(i=0; i<m; i++)
    {
        scanf("%d",&n);
        for(j=0; j<n; j++)
            scanf("%d",&a[j]);
        for(j=0; j<n; j++)
            scanf("%d",&b[j]);
        for(j=0; j<n-1; j++)
        {
            for(k=0; k<n-j-1; k++)
            {
                if(a[k]<a[k+1])
                {
                    t=a[k];
                    a[k]=a[k+1];
                    a[k+1]=t;
                }
                if(b[k]>b[k+1])
                {
                    t=b[k];
                    b[k]=b[k+1];
                    b[k+1]=t;
                }
            }
        }
        int sum=0;
        for(j=0; j<n; j++)
            sum+=a[j]*b[j];
        printf("%d\n",sum);
    }
 
 
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值