DHU OJ

1质因数(循环)

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    cout<<n<<"=";//输入完成直接输出整数
    for(int i=2;i<=n;i++){
       while(i!=n){
        if(n%i==0){
            cout<<i<<"*";
            n=n/i;
        }
        else break;
       }
    }
    cout<<n;
    return 0;
}

2谁是老二?(一维数组)

#include <iostream>
using namespace std;
void sort(int a[],int n){
    for(int i=0;i<n-1;i++){
        int end=i;
        int temp=a[end+1];
        while(end>=0){

            if(temp>a[end]){
                a[end+1]=a[end];
                end--;
            }
            else
                break;

        }
        a[end+1]=temp;
    }
}
int main()
{
    int n;
    int a[100],b[100];
    int i;
    int k;
    while(scanf("%d",&n)!=EOF){
        for(i=0;i<n;i++){
        cin>>a[i];
        b[i]=a[i];
    }
    sort(a,n);
    int max=0;
    for(i=0;i<n;i++){
        if(a[i]!=a[max]){
            k=a[i];
            cout<<k<<" ";
            break;//找到第二大的数直接退出
        }
    }
    if(i>=n){
        cout<<"none";
    }
    else{
        for(i=0;i<n;i++){
            if(b[i]==k)
                cout<<i<<" ";//在原数组中输出下标
        }
    }
    cout<<"\n";
    }
    return 0;
}

3骑士斗恶龙(一维数组)

#include <iostream>
using namespace std;

void sort(int a[],int n){
    for(int i=0;i<n-1;i++){
        int end=i;
        int temp=a[end+1];
        while(end>=0){

            if(temp<a[end]){
                a[end+1]=a[end];
                end--;
            }
            else
                break;

        }
        a[end+1]=temp;
    }
}
int main()
{
    int a[1000];//龙头
    int b[1000];//骑士
    int n,m;
   // cin>>n;
    //cin>>m;
    while(scanf("%d %d",&n,&m)!=EOF){
        int i,j;
    int sum;
    for(i=0;i<n;i++)
        cin>>a[i];
    for(i=0;i<m;i++)
        cin>>b[i];
    if(n>m){
        cout<<"Lose!\n";
    }
    else{
        sort(a,n);
        sort(b,m);//将龙头直径,骑士能力从小到大排序
        sum=0;//计算能量
        j=0;
        for(i=0;i<n&&j<m;i++){
            if(a[i]>b[j]){
                while(a[i]>b[j])
                    j++;
            }
            sum=sum+b[j];
            j++;
        }
    if(i==n&&j<=m)
        cout<<sum;
    else
        cout<<"Lose!\n";

    }
  cout<<"\n";
    }


    return 0;
}

4蛇形方阵(二维数组) 

#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
const int maxn = 20;
int a[maxn][maxn];
int main()
{
	int n;
	cin >> n;
	int  x=0, y=0;
	int flag=1;
	//memset(a, 0, sizeof(a));
	int j=1;//计数
	for(int i=1;i<=n*n;i++){
        a[x][y]=i;
        if(flag==1){
            if(j%n!=0){
                y++;
                j++;
            }
            else{
                x++;
                flag=0;
                j=1;
            }
        }
        else{
            if(j%n!=0){
                y--;
                j++;
            }
            else{
                x++;
                flag=1;
                j=1;
            }
        }
	}



	for (x = 0; x<n; x++)
	{
		for (y = 0; y<n; y++)
			printf("%4d", a[x][y]);
		cout << endl;
	}
    return 0;
}

 5单词统计(字符串)

#include<iostream>
#include<stdlib.h>
#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;
}

 6转换成十进制(字符串)

#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();
    int sum=0,k=0;
    for(i=len-1;i>=0;i--,k++){
        if(str[i]>='A'&&str[i]<='J')
            sum=sum+pow(n,k)*(str[i]-55);//‘A’为65,‘a’为97
        else{
            sum=sum+pow(n,k)*(str[i]-'0');//如果是数字字符则转化成整数类型
        }
    }
    cout<<sum<<endl;
    }


    return 0;
}

 7十进制转换成其它进制(字符串)

#include<iostream>
#include<cstring>
using namespace std;
void change( int n,int m )
{
    int x;
     if(n)
     {
        change(n/m,m);//递归处理
         x=n%m;
         if( x <= 9 )
            cout<<x;
         else
         cout<<char(x - 10 + 'A');
     }
 }
int main(){
    int n,m;
    while(cin>>n>>m){
       change(n,m);
       cout<<endl;

    }
    return 0;
}

 8最大相同子串(字符串)

#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';
	//将得到的相同子串存入subs[]字符串
}

int main(){
	int i,j,k;
	string a,b; //存储输入的两个字符串
	char c[max],sub[max]={0};//c
	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);
					//subs[]存储上次的最长子串,c[]用来存储此次传回来的最长子串
					//下面while循环用来比较
					if(strlen(c)>strlen(sub)||(strlen(c)==strlen(sub)&&strcmp(c,sub)<0))
                        //strcmp(c,sub)<0表示c的小于sub
						strcpy(sub,c);        //如果c[]比sub[]小,则将c赋值给sub
					j++;//j继续向后找看是否有更长的子串
				}
			}
		}
		puts(sub);
		//memset(a,0,sizeof(a));
	}
	return 0;
}

 9冰雹数(循环)

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

int ice_max(int x)
{
    int max=0;
	while(x!=1)
	{
		if(x % 2 == 0) {
            x=x/2;//当x为偶数时
            if(x > max )
			 max=x;
			 //可以不比较,因为这里除以2之后必定比前面小
		}

		else
		{
			x=x*3+1;
			if(x > max )
			 max=x;
		}
	}
	return max;
}

int main()
{
	int m,n,i;
	cin>>n;
	int max=0;
	for(i=2;i<=n;i++)
	{
		if(ice_max(i) > max)
            max=ice_max(i);
	}
	cout<<max<<endl;
	return 0;
}

 10小数第n位(循环)

#include<iostream>
using namespace std;

int main(){
	int a,b,n,i;
	while(cin>>a>>b>>n){

	while(a>b){
		a%=b;
	}                     //先把整数部分搞掉;
	i=0;
	while(i<=n+2){
		a*=10;//补0来做除法
		i++;
		if(i>=n && i<=n+2)      //从n开始的后三位才输出;
		{
			cout<<a/b;
		}
		a=a%b;     //模拟小数除
	}
	cout<<endl;
}
	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值