HDU by Java &&c++_柿子_@的博客-程序员秘密

技术标签: Java  c++  

蟠桃记 java和c++版

Problem Description
喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知:悟空是在研究一个数学问题!
什么问题?他研究的问题是蟠桃一共有多少个!
不过,到最后,他还是没能解决这个难题,呵呵-
当时的情况是这样的:
第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢?

Input
输入数据有多组,每组占一行,包含一个正整数n(1<n<30),表示只剩下一个桃子的时候是在第n天发生的。

Output
对于每组输入数据,输出第一天开始吃的时候桃子的总数,每个测试实例占一行。

Sample Input
2
4

Sample Output
4
22

Author
lcy

c++

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

int main()
{
    
    int n;//第几天发生只剩一个

    while(cin>>n){
    
            int t= 1;
            int sum;
        for(int i=1;i<n;i++){
    
            sum=(t+1)*2;
            t=sum;
        }
        cout<<sum<<endl;

    }

}

java

package com.imooc;
import java.util.Scanner;
public class dog extends Animal {
    
	
	public static void main(String[] args) {
    
		Scanner in = new Scanner(System.in);
		while(in.hasNext()) {
    
			int t =1;
			int sum = 0 ;
			int m = in.nextInt();
			for(int i=1;i<m;i++) {
    
				sum=(t+1)*2;
				t=sum;
				
			}
			System.out.println(sum);
		}
		
	}
	
	

}

青年歌手大奖赛_评委会打分

Problem Description
青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。

Input
输入数据有多组,每组占一行,每行的第一个数是n(2<n<=100),表示评委的人数,然后是n个评委的打分。

Output
对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。

Sample Input
3 99 98 97
4 100 99 98 97

Sample Output
98.00
98.50

Author
lcy

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

int main()
{
    
    int m;
    double a[101];
    while(cin>>m){
    

        for(int i=0;i<m;i++){
    
            cin>>a[i];
        }
            sort(a,a+m);
            double sum=0.00;
            for(int j=1;j<m-1;j++)
            {
    
                sum+=a[j];
            }
            cout<<setiosflags(ios::fixed)<<setprecision(2)<<sum/(m-2)<<endl;

    }




}

java

package com.imooc;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class dog extends Animal {
    
	
	public static void main(String[] args) {
    
		Scanner in = new Scanner(System.in);
		
		while(in.hasNext()) {
     
			int t =1;
			double sum = 0.00 ;
			int m = in.nextInt();
			double a[]= new double[m];
			for(int i=0;i<m;i++) {
    
				a[i]=in.nextDouble();	
			}
			Arrays.sort(a);
			for(int j=1;j<m-1;j++) {
    
				sum+=a[j];
			}
			System.out.println(String.format("%.2f", sum/(m-2)));
			
		}
		
	}
	
	

}

偶数求和

Problem Description
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。

Input
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。

Output
对于每组输入数据,输出一个平均值序列,每组输出占一行。

Sample Input
3 2
4 2

Sample Output
3 6
3 7

Author
lcy

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

int main()
{
    
    int m,n;//m和n
    while(cin>>n>>m)
    {
    
        int t = n/m;
        int sum[100]= {
    0};
        int a=2;
        if(n%m==0)//如果正好分完
        {
    
            for(int i=0; i<t; i++)
            {
    
                for(int j =0 ; j<m; j++)
                {
    
                    sum[i]+=a;//加的都是2的倍数
                    a+=2;

                }

            }
        }
        else  //最后不足m个
        {
    
            for(int i=0; i<=t; i++)
            {
    
                if(i!=t)
                {
    
                    for(int j =0 ; j<m; j++)
                    {
    
                        sum[i]+=a;
                        a+=2;
                    }
                }
                else
                {
    
                    for(int j =0 ; j<(n-(t*m)); j++)
                    {
    
                        sum[i]+=a;
                        a+=2;

                    }
                }
            }
        }
        //输出的时候也要分是否完全平分
        if(n%m==0)
        {
    
            //pingfen
            for(int k=0; k<t; k++)
            {
    
                if(k==0)
                    cout<<sum[k]/m;
                else
                    cout<<" "<<sum[k]/m;//除m肯定不是小数
            }
            cout<<endl;
        }
        else
        {
    
            for(int k=0; k<t; k++)
            {
    
                if(k==0)
                    cout<<sum[k]/m;
                else
                    cout<<" "<<sum[k]/m;
            }
            cout<<" "<<sum[t]/(n-m*t)<<endl;//最后一个除数不是m,不用忘了区分
        }
    }
}

java

public class oj {
    

	public static void main(String[] args) {
    // 主函数
		Scanner in = new Scanner(System.in);
		int[] num = new int[100];
		int t = 2;
		for (int i = 0; i < 100; i++) {
    
			num[i] = t;
			t += 2;
		}
		while (in.hasNext()) {
    
			int n = in.nextInt();
			int m = in.nextInt();
			List<Integer> list = new ArrayList<>();
			if (n % m == 0) {
    
				for (int i = 0; i < n; i+=m) {
    
					int sum = 0;
					for (int j = i; j < i + m; j++) {
    
						sum += num[j];// 和做c的时候用的方法不太一样。
					}
					list.add(sum / m);

				}

			} else {
    

				int i = 0;
				for (; i < n - (n % m); i += m) {
    
					int sum = 0;
					for (int j = i; j < i + m; j++) {
    
						sum += num[j];
					}
					list.add(sum / m);

				}

				int sum = 0;
				m = n % m;
				for (int j = i; j < n; j++) {
    
					sum += num[j];
				}
				list.add(sum / m);
			}

			for (int i = 0; i < list.size() - 1; i++) {
    
				System.out.print(list.get(i) + " ");
			}
			System.out.println(list.get(list.size() - 1));

		}
	}

}

数据的交换输出

Problem Description
输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。

Input
输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,不做处理。

Output
对于每组输入数据,输出交换后的数列,每组输出占一行。

Sample Input
4 2 1 3 4
5 5 4 3 2 1
0

Sample Output
1 2 3 4
1 4 3 2 5

Author
lcy

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

int main()
{
    
    int n;
    while(cin>>n){
    
            if(n==0)return 0;
            int a[n+1];
        for (int i=0;i<n;i++){
    //下面java是输入即找到最小值,少了一个for循环,建议看看。
            cin>>a[i];
        }
        int t=0;//t是最小值的下标
        for(int i=1;i<n;i++){
    
            if(a[t]>a[i]){
    
                t=i;
            }
        }
        int temp;
        temp = a[t];
        a[t] = a[0];
        a[0] = temp;
        for(int i=0;i<n;i++){
    
            if(i==0){
    
                cout<<a[0];
            }
            else cout<<" "<<a[i];
        }
    cout<<endl;

    }



}

public class oj{
    
	public static void main(String[] args) {
    
		Scanner in = new Scanner(System.in);
		while(in.hasNext()) {
    
			int n = in.nextInt();
			if(n==0) {
    
				break;
			}
			int[] num = new int [n];
			num[0] = in.nextInt();//输入的时候直接找出最大值,少用一个for循环
			int t = 0;
			int temp;
			for(int i=1 ;i<n;i++) {
    
				num[i] = in.nextInt();
				if(num[i]<num[t]) {
    
					t = i;
				}
			}//输入结束,比较也结束
			temp = num[t];
			num[t]= num[0];
			num[0]=temp;
			
			//shuchu
			for(int i =0 ;i<n;i++) {
    
				if(i==0)
					System.out.print(num[i]);
				else System.out.print(" "+num[i]);
			}
			System.out.println();
			
			
			
		}
		
		
		
	}
	
	
	
	
}


HDU 2017

#include<bits/stdc++.h>
using namespace std;
int main(){
    
    int n;
    cin>>n;
    string s;
    for(int i = 0;i<n;i++){
    
            cin>>s;
            int num=0;
            int alp = 0;
            int len = s.size();
           for(int i=0;i<len;i++){
    

           if(isdigit(s[i]))
                num++;

           }
           cout<<num<<endl;

    }



}


public class oj{
    
	public static void main(String[] args) {
    
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		for(int i=0;i<n;i++) {
    
			String s = in.next().toLowerCase();
			int sum = 0;
			for(int j= 0 ;j<s.length();j++) {
    
				if(Character.isDigit(s.charAt(j)))
					sum++;
			}
			System.out.println(sum);
		}
	
	}
	
}


HDU 2018

#include<bits/stdc++.h>
using namespace std;
int main()
{
    
    int n;
    int a[55];
    a[0] = 1;
    a[1]=2;
    a[2]=3;
    a[3]=4;
    for(int i=4; i<55; i++)
    {
    
        a[i] = a[i-3]+a[i-1];
    }
    while(cin>>n)
    {
    
        if(n==0)
            return 0;
        cout<<a[n-1]<<endl;





    }





}


 
public class oj {
    
 
	public static void main(String[] args) {
    
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		long[] amount = new long [54];
		amount[0] = 1;
		amount[1] = 2;
		amount[2] = 3;
		amount[3] = 4;
		for (int i = 4; i < amount.length; i++) {
    
			amount[i] = amount[i-1]+amount[i-3];
		}
		while(in.hasNext()) {
    
			int n = in.nextInt();
			if(n==0) {
    
				break;
			}
			System.out.println(amount[n-1]);
		}
	}
 
}

HDU 4519
郑厂长的故事,想去腾讯

#include<bits/stdc++.h>//想起来比写起来难多了
using namespace std;
int main()
{
    
    int T;
    cin>>T;

for(int i=0;i<T;i++){
    
        int sum=0;
        int N,K,M;
    cin>>N>>K>>M;//输入人数,项目数,医生数

    //当医生比员工多,那就相当于一个医生看一个员工,
    //直接就项目数多少就多少分钟
    if(M>=N)
    sum=K;
    else {
    
        if((N*K)%M==0){
    //如果项目总数正好可以被医生平分
            sum=(N*K)/M;
        }
        else {
    
            sum=(N*K)/M+1;
        }
    }
    cout<<sum<<endl;





}






}


HDU 2019

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

int main()//只用一个for循环,应该跟简单,直接在输入中进行比较并排序。
{
    
    int n,m;
    //n为数列长度
    //m为插入的数
    while(cin>>n>>m)
    {
    
        int a[n+2];
        if(n==0&&m==0)
            return 0;
        int flag=0;
        for(int i=0; i<=n; i++)
        {
    

            cin>>a[i];
            if(i!=n-1)
            {
    
                if(a[i]>m&&a[i-1]<=m&&flag==0)
                {
    
                    int t=a[i];
                    a[i]=m;
                    i++;
                    a[i]=t;
                    flag=1;
                }
            }
            else//已知列表在最后一个的前面或者后面插入元素
            {
    
                if(a[i]>m&&a[i-1]<=m&&flag==0)
                {
    
                    int t=a[i];
                    a[i]=m;
                    i++;
                    a[i]=t;
                    flag=1;
                    i++;
                }
            }

        }


        for(int i=0; i<=n; i++)
        {
    
            if(i==0)
                cout<<a[0];
            else
                cout<<" "<<a[i];
        }
        cout<<endl;
    }





}

HDU 2020 绝对值排序

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

int main()
{
    

    int n;
    int a[101];
    while(cin>>n)
    {
    
        // cin>>a[0];//本来想边输入边排序,后来发现这样会进行多个for循环,虽然次数少,但是总的时间加起来多
        if(n==0)
            return 0;
        for(int i=0; i<n; i++) //全都输入后直接排序
        {
    
            cin>>a[i];
        }


        for(int i=0; i<n; i++)//冒泡排序,还是有点复杂,数据结构还是要好好学。因相当于第一个for将最大的放到前面,所以可以直接输出,
        如果排序方法像java版一样就不能直接写在一个for{
    
            int m = a[i];
            for(int j =i ; j<n; j++)
            {
    
                if(abs(a[i])<abs(a[j]))
                {
    
                    m = a[j];
                    a[j] = a[i];
                    a[i] =m;
                }
            }

            if(i==0)
                cout<<a[0];
            else
                cout<<" "<<a[i];



        }

        cout<<endl;

    }



}

public class oj{
    
	public static void main(String[] args) {
    
		Scanner in = new Scanner(System.in);
		while(in.hasNext()) {
    
			int n = in.nextInt();
			if(n==0) {
    
				break;
			}
			int[] a = new int [n];
			for(int i=0;i<n;i++) {
    
				a[i]=in.nextInt();
			}
			int t;
			for(int i=0;i<n;i++) {
    
				for(int j=0;j<n-i-1;j++) {
    
					if(Math.abs(a[j+1])>Math.abs(a[j])) {
    
						t = a[j+1];
						a[j+1] = a[j];
						a[j] = t;
					}
				}
				
				
				
				
			}
			for (int i = 0; i < a.length-1; i++) {
    
				System.out.print(a[i]+" ");
			}
			System.out.println(a[a.length-1]);
			
		}
	
	}
	
}


hdu2021发工资

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

int main()
{
    
    int n;

    while(cin>>n)
    {
    
        if(n==0)
            return 0;
        int sum=0;
        int a[102];
        for(int i=0; i<n; i++)
        {
    
            cin>>a[i];


            int bai=a[i]/100;
            int wushi = a[i]%100/50;
            int shi = (a[i]%100%50)/10;
            int wuyuan = (a[i]%100%50%10)/5;
            int two = a[i]%100%50%10%5/2;
            int one = a[i]%100%50%10%5%2;
            sum+=(bai+wushi+shi+wuyuan+two+one);


        }
        cout<<sum<<endl;
    }




}

java

public class oj{
    
	public static void main(String[] args) {
    
		//人数
		
		Scanner in = new Scanner(System.in);
		
		while(in.hasNext()) {
    
			int n =in.nextInt();
			if(n==0)break;
			int sum = 0;
			for(int i=0;i<n;i++) {
    
				int money = in.nextInt();
				int bai = money/100;
				int wushi = money%100/50;
				int shi=(money%100-wushi*50)/10;
				int five = (money%10)/5;
				int two = (money%10-five*5)/2;
				int one = money%10-five*5-two*2;
				
				sum+=(bai+wushi+shi+five+two+one);
			}
			System.out.println(sum);
		}
		
		
		
	}
}

海选女猪脚

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

int main(){
    
    int m,n;
    while(cin>>m>>n){
    
            int a[m+1][n+1];
    int max_;int lie,hang;
        for(int i=0;i<m;i++){
    //输入
            for(int j=0;j<n;j++){
    
                cin>>a[i][j];
                if(i==0&j==0)
                    max_=abs(a[0][0]);
                if(max_<abs(a[i][j])){
    
                    max_=abs(a[i][j]);
                    hang = i;
                    lie= j;
                }
            }
        }
        cout<<hang+1<<" "<<lie+1<<" "<<a[hang][lie]<<endl;
    }



}

public class oj{
    
	public static void main(String[] args) {
    
		Scanner in = new Scanner(System.in);
		while(in.hasNext()) {
    
			int m = in.nextInt();
			int n = in.nextInt();
			int[][] a = new int[m][n];
			int max = 0;
			int hang=1,lie=1;
			for(int i=0;i<m;i++) {
    
				for(int j=0;j<n;j++) {
    
					a[i][j]=in.nextInt();
					if(i==0&&j==0)max = Math.abs(a[0][0]);
					if(max<Math.abs(a[i][j]))
					{
    
						max =Math.abs(a[i][j]);
						hang = i+1;
						lie = j+1;
					}
					
				}
			}
			System.out.println(hang+" "+lie+" "+a[hang-1][lie-1]);
		}
		
		
	}
}



HDU 1003 有关动态规划问题

public class oj{
    
	public static void main(String[] args) {
    
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		for(int i=0;i<n;i++) {
    //输入每一例
			int m = in.nextInt();
			int max=-9999;
			int[] a = new int [m];
			for(int j=0;j<m;j++) {
    
				a[j]= in.nextInt();
				
			}
			int begin = 0,begin2 = 0;
			int end = -1,end2=-1;
			int sum = 0;
			for(int i1=0;i1<m;i1++) {
    
				sum+=a[i1];
				end2++;
				if(sum>max) {
    
					max=sum;
					begin = begin2;
					end = end2;
				}
				if(sum<0) {
    
					sum=0;
					begin2 = i1+1;
					end2 = i1;
				}
				
				
					
				
			}
			System.out.printf("Case %d:%n%d %d %d%n",i+1,max,begin+1,end+1);
			if(i!=n-1)
				System.out.println();
			
			
			
			
			
		}
	}
}




HDU 2024 C语言合法标识符

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

int main(){
    int n;
    cin>>n;
    getchar();
    string s;

    while(n--){
        int flag = 0;
        getline(cin,s);
        int len=s.length();//字符串的长度
        if(len>50)
            {
                flag=0;

            }
        else if(isalpha(s[0])||s[0]=='_'){
                 flag=1;
            for(int i=1;i<len;i++){
                if(!isalnum(s[i])&&s[i]!='_'){
                    flag=0;
                    break;
                }
            }



        }
        if(flag==0)
            cout<<"no"<<endl;
        else cout<<"yes"<<endl;


    }





}

HDU2025

#include<bits/stdc++.h>//这样属于一种偷懒式做法?,反正不值得浮现java了
using namespace std;

int main()
{
    
    char a[106];
    while(~scanf("%s",a)){
    
        int len = strlen(a);
        int maxx=0;
        for(int i=0;i<len;i++)
        {
    
            if(a[i]>a[maxx])
                maxx=i;

        }
        for(int i=0;i<len;i++){
    
            if(a[i]==a[maxx])
                cout<<a[i]<<"(max)";
            else cout<<a[i];
        }
        cout<<endl;
    }
}

HDU 2026 首字母变大写

  • 只需要找到空格,并将前面的字母变成大写字母,用到了toupper()函数.
#include<bits/stdc++.h>
using namespace std;

int main()
{
    char c[108];
    while(gets(c))
    {
        int len=strlen(c);
        char f=toupper(c[0]);
        c[0]=toupper(c[0]);
        for(int i=0;i<len;i++)
        {
            if(c[i]==' ')c[i+1]=toupper(c[i+1]);


        }
        cout<<c<<endl;
    }


}

java

public class oj{
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while(in.hasNext()) {
			StringBuffer bu = new StringBuffer(in.nextLine());
			bu.setCharAt(0, (char) (bu.charAt(0)-32));
			for(int i=1;i<bu.length()-1;i++) {
				if(bu.charAt(i)==' ') {
					bu.setCharAt(i+1, (char) (bu.charAt(i+1)-32));
				}
			}
			System.out.println(bu.toString());
			
		}
	}
	
}

HDU 1008

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    while(cin>>n){
            int sum=0;
        if(n==0) return 0;
        int a[101];
        a[0]=0;
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }
        for(int i=1;i<=n;i++){
            int t=a[i]-a[i-1];
            if(t>0){
                sum+=t*6+5;
            }
            else {
                sum+=(-t)*4+5;
            }
        }
        cout<<sum<<endl;
    }


}

HDU 1005

用一个简单的递归就行,唯一难得一点就是,如果不找规律暴力的话会超时,所以先找一下规律。

#include<bits/stdc++.h>
using namespace std;
int f(int a,int b,int n){
    if(n==1)
        return 1;
    if(n==2)
        return 1;
    else
       return (a*f(a,b,n-1)+b*f(a,b,n-2))%7;



}

int main()
{
    int a,b,n;
    while(cin>>a>>b>>n)
    {
        if(a==b&&b==n&&n==0)return 0;
        cout<<f(a,b,n%49)<<endl;//由于f(n-1)和f(n-2) 取值只有0,1,2,3.4,5,6这7种取值,
        //A,B为固定值,所有f(n) = A * f(n - 1) + B * f(n - 2) 有7 * 7 = 49 种取值。
    }


}

HDU1013

  • 只需要注意数可能很大,用i整型不适合,所以用字符数组
#include<bits/stdc++.h>
using namespace std;
int ge(int n)
{
    int m=0;
    if(n<10)
        return n;
    else
    {
        while(n>0)
        {
            m+=n%10;
            n/=10;
        }
        ge(m);
    }

}

int main()
{
    char n[1001];
    int i=0;
    while(cin>>n)
    {
        int sum=0;
        if(n[0]=='0')
            break;
       for(int i=0;n[i]!='\0';i++)
       {
           sum+=n[i]-48;//相当于-'0'
           //if(sum>9)sum=sum%10+sum/10;直接加这一句就不用那个递归了.开始没注意这个东西。后来再别人博客看的,还有数论的结论:Digtial Roots=(sum-1)%9+1
       }
       cout<<ge(sum)<<endl;

    }

}

HDU 2027

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

int main()
{

    int n;
    cin>>n;
    getchar();
    while(n--)
    {
        int n1=0,n2=0,n3=0,n4=0,n5=0;
        char a[101];
        gets(a);
        for(int i=0;i<strlen(a);i++)
        {
            if(a[i]=='a')
                n1++;
            else if(a[i]=='e')
                n2++;
            else if(a[i]=='i')
                n3++;
            else if(a[i]=='o')
                n4++;
            else if(a[i]=='u')
                n5++;

        }
        cout<<"a:"<<n1<<endl<<"e:"<<n2<<endl<<"i:"<<n3<<endl<<"o:"<<n4<<endl<<"u:"<<n5<<endl;
        if(n!=0)
            cout<<endl;
    }

}

public class oj{
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n=in.nextInt();
		in.nextLine();
		while(n!=0) {
			int a1=0,a2=0,a3=0,a4=0,a5=0;
			String s=in.nextLine();
			
			for(int i=0;i<s.length();i++) {
				if(s.charAt(i)=='a')
				{
					a1++;
					
				}
				else if(s.charAt(i)=='e') {
					a2++;
				}
				else if(s.charAt(i)=='i') {
					a3++;
				}
				else if(s.charAt(i)=='o') {
					a4++;
				}
				else if(s.charAt(i)=='u') {
					a5++;
				}
			}
			
			System.out.println("a:"+a1);
			System.out.println("e:"+a2);
			System.out.println("i:"+a3);
			System.out.println("o:"+a4);
			System.out.println("u:"+a5);
			
			if(n!=0)
				System.out.println();
			n--;
		}
		
		
	}
	
}

HDU 1017

  • 其实这个题看懂描述就ok,他是按块输入,第一个n表示输入n个块,然后每一块以0 0 结尾结束输入。
#include<bits/stdc++.h>
using namespace std;

int main()
{
    int i;
    int t=1;
    cin>>i;

    double n,m;
    while(i--)
    {
        while(cin>>n>>m)
        {
            if(n==m&&n==0)
                break;
            int sum=0;
            for(double j=1; j<n; j++)
            {
                for(double k=1; k<j; k++)
                {
                    double a=(j*j+k*k+m)/(j*k);
                    if(floor(a+0.5)==a)
                        sum++;

                }
            }
            cout<<"Case "<<t<<": ";
            t++;
            cout<<sum<<endl;
        }
        t=1;
        if(i)cout<<endl;
    }


}

这种也没必要再重现java了
@[TOC]111

HDU 1020

  • 又是一个读题决定一切的题
  • 开始觉的找这个字符串中所有一样的,而题目要求是找当前字母相邻一样的。
  • 水题
  • 但是因为是字符串相关的,所有还是要java一下。
#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin>>n;
    getchar();
    //int a[26]={0};//一开始想都初始为1,后来想还是这样输出的时候方便,后来理解“正确题意后就用不到了。”
    while(n--)
    {

        string s;
        cin>>s;
        int len=s.size();
       for(int i=0;i<len;i++)
       {//
           int t=0;
           for(int j=i;j<len;j++)
           {
               if(s[i]==s[j])//找后面相连一样的
               {
                   t++;
                   continue;
               }
               else break;

           }
           if(t==1)cout<<s[i];
           else cout<<t<<s[i];
           i=i+t-1;

       }
       cout<<endl;



    }
}

java

import java.util.Scanner;

public class main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        in.nextLine();
        while (n != 0) {
            String s = in.nextLine();
            for (int i = 0; i < s.length(); i++) {
                int t = 0;
                for (int j = i; j < s.length(); j++) {
                    if (s.charAt(i) == s.charAt(j)) {
                        t++;
                        continue;
                    } else
                        break;
                }
                if (t == 1)
                    System.out.print(s.charAt(i));
                else
                {
                    System.out.print(t);
                    System.out.print(s.charAt(i));
                }
                    
                i = i + t - 1;
            }
            System.out.println();
            n--;
        }

    }

}

HDU 1022

  • 一个关于栈顶的水题,不难,但是要理解题意,就是可以边进边出,这时候就要想好这怎么搞好“in”和“out”,开始的方法一直超时,这,,唉,还是太菜,不得不再肝。
#include<bits/stdc++.h>
using namespace std;
int p[10001];
char a[10001];
char b[10001];
 stack<char>t;
int main()
{
    int n,f,m,i;

    while(cin>>n>>a>>b)
    {
        while(!t.empty())
            t.pop();
            f=0;
            m=0;
        for(i=0;i<n;++i){
            t.push(a[i]);//入栈
            p[m]=1;
            m++;
            while(!t.empty()&&t.top()==b[f])//又符合出栈要求的就出栈,没有就放里面,如果可以顺利出全,那就OK
            {
                p[m]=0;
                m++;
                t.pop();
                f++;
            }
        }




            if(t.empty())//正好可以顺利进出
            {
                cout<<"Yes."<<endl;
                for(int j=0;j<2*n;j++){
                    if(p[j])
                        cout<<"in"<<endl;
                    else
                        cout<<"out"<<endl;
                }
            }
            else
                cout<<"No."<<endl;
            cout<<"FINISH"<<endl;
        }






}

HDU 1027

  • 原本想用STL做个题,自己看着题的时候以为是搜索,但是学到了next_permutation()全排列这个函数,真的太秀了。这个函数就是求当前排列的写一个排列,按字典序,
  • 比如123
    123
    132
    213
    231
    312
    321
#include<bits/stdc++.h>
using namespace std;

int main()
{
    int m,n;
    while(cin>>m>>n){
        int a[m];
        int k=1;//注意1就是1~N的序列,so the k should begin at 1.
        for(int i=0;i<m;i++){
            a[i]=i+1;
        }
        while(next_permutation(a,a+m))//maybe n is biger than m
        {
            k++;
            if(k==n)
                break;

        }
        for(int i=0;i<m;i++){
            if(i==0)
                cout<<a[i];
            else
                cout<<" "<<a[i];
        }
        cout<<endl;
    }
}

HDU 2028

#include <bits/stdc++.h>
using namespace std;
int gongbeishu(int n,int m)//求最大公倍数
{
    //先转换大小
    int a=n,b=m;
    int f;
    if(n<m){
        int t=n;
        n=m;
        m=t;
    }
    while(m!=0){
        f=n%m;
        n=m;
        m=f;
    }//n就是两个数的最小公约数
    return a/n*b;//使用最小公约数求最大公倍数
    


}

int main()
{
    int n;
    int a[1001];
    while(scanf("%d",&n)!=EOF){
            cin>>a[0];

        for(int i=1;i<n;i++){
            scanf("%d",&a[i]);
            a[i]=gongbeishu(a[i],a[i-1]);//输入一个求一个,两个两个的求最后就可以求出整个序列的
        }
        cout<<a[n-1]<<endl;

    }
}

public class oj {
	public static int gbs(int n,int m) {
		int a=n,b=m;
		if(n<m) {
			int t=n;
			n=m;
			m=t;
		}
		int f;
		while(m!=0) {
			f=n%m;
			n=m;
			m=f;
		}
		return a/n*b;
		
		
	}
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while(in.hasNext()) {
			int n = in.nextInt();
			int [] a = new int[n];
			a[0]=in.nextInt();
			for(int i=1;i<n;i++) {
				a[i]=in.nextInt();
				a[i]=gbs(a[i],a[i-1]);
			}
			System.out.println(a[n-1]);
		}
		
	
		
		
		

	}

}

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int i,j;
    while(n--)
    {
        int flag=0;
        string s;
        cin>>s;
        getchar();
        int len=s.size();
        if(len%2==0) //偶数
        {
            for(i=len/2-1,j=len/2; i>=0,j<=len-1; i--,j++)//一定要注意i和j 的取值范围
            {
                if(s[i]!=s[j])
                {
                    flag=1;
                    break;
                }
            }

        }
        else
        {
            for(i=len/2,j=len/2;i>=0,j<len;i--,j++){
                if(s[i]!=s[j])
                {
                    flag=1;
                    break;
                }
            }
        }
        if(flag==1)
            cout<<"no"<<endl;
        else
            cout<<"yes"<<endl;


    }
}

public class oj {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		in.nextLine();
		int i,j;
		while(n!=0) {
			int flag=1;
			String s = in .nextLine();
			int len=s.length();
			for(i=0;i<len;i++) {
				if(s.charAt(i)!=s.charAt(len-i-1)) {
					flag=0;
				}
			}
			if(flag==0)
				System.out.println("no");
			else System.out.println("yes");
			
			n--;
			
		}
		
	
		
		
		

	}

}

HDU 1031

  • 简单题,但是要注意要求
#include<bits/stdc++.h>
using namespace std;
int m;
int maxx(double *a)
{
    int t=0;
    for(int i=0;i<m;i++){
        if(a[i]>a[t])
            t=i;
        else continue;
    }
    a[t]=-1;
    return t+1;

}
//开始的时候要看清题,开始以为是输出最大的打分,后来让输出最大打分的下标
//然后又WA,又看见是下标要从小到大输出。唉
int main()
{
    int n,k;
    while(~scanf("%d %d %d",&n,&m,&k))
    {
        double score[m];
        double t;//t是个double,也不报错,自己找了好久
        memset(score,0,sizeof(double)*m);//注意double多占 的内存
        for(int j=0; j<n; j++)
        {
            for(int i=0; i<m; i++)
            {

                scanf("%lf",&t);
                score[i]+=t;
            }

        }
//        for(int i=0;i<m;i++)
//        {
//            cout<<" "<<score[i];
//        }
        //sort(score);
            int b[k];
        for(int i=0;i<k;i++){
            b[i]=maxx(score);
        }
        sort(b,b+k);
        for(int i=k-1;i>=0;i--){
            if(i==k-1)cout<<b[i];
            else cout<<" "<<b[i];
        }
        cout<<endl;



    }



}

HDU 1032

#include<bits/stdc++.h>
using namespace std;
int ti;
int times(int n)
{
    if(n==1)return ti;
    else if(n%2!=0){
            ti++;
        times(3*n+1);

    }
    else
    {ti++;
        times(n/2);
    }

}

int main()
{
    int m,n;int a,b;
    while(cin>>m>>n){
           a=m;
           b=n;
            if(a>b){
                int f=a;
                a=b;
                b=f;
            }
            int maxx=0;
        for(int i=a;i<=b;i++){
                ti=0;//每次for都要归0一次
            int t=times(i);
            if(t>maxx)
                maxx=t;
        }
        printf("%d %d %d\n",m,n,maxx+1);
    }
}

HDU 1039

  • 用来三个函数,注要来判断是否满足三个条件,
#include<bits/stdc++.h>
using namespace std;
string s;
bool yuanyin(int n)
{
    for(int i=0; i<n; i++)
    {
        if(s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u')
            return true;
    }

    return false;

}
bool lianxu1(int n)//连续的两个不能相等
{
    for(int i=0; i<n-1; i++)
    {
        if(s[i]==s[i+1]&&s[i]!='e'&&s[i]!='o')
            return false;
    }
    return true;

}
bool lianxu2(int n)//不能有连续的三个元音或者辅音
{
    int a=0,b=0,c=0;//a代表元音连续的次数,b代表辅音连续的次数,c代表前一个的状态,看是否从辅音到元音,或者从元音到辅音。
    if(s[0]=='a'||s[0]=='e'||s[0]=='i'||s[0]=='o'||s[0]=='u')
    {
        c=1;
    }
    else
        c=0;
    for(int i=0; i<n; i++)
    {
        if(s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u')
        {
            if(c==1)
                a++;
            else
            {
                a++;
                b=0;
                c=1;
            }
        }
        else
        {
            if(c==0)
                b++;
            else
            {
                b++;
                a=0;
                c=0;
            }
        }
        if(a>2||b>2)return false;
    }
    return true;


}
int main()
{

    while(cin>>s)
    {
        getchar();
        if(s=="end")
            break;
        int len=s.size();
        if(yuanyin(len))//存在元音
        {
            if(lianxu1(len))
            {
                if(lianxu2(len))
                {
                    cout<<"<"<<s<<"> is acceptable."<<endl;
                }
                else
                    cout<<"<"<<s<<"> is not acceptable."<<endl;

            }
            else
                cout<<"<"<<s<<"> is not acceptable."<<endl;

        }
        else
        {
            cout<<"<"<<s<<"> is not acceptable."<<endl;
        }


    }
}

HDU 1033

  • 题意快比做题的时间都长了
#include<bits/stdc++.h>
using namespace std;

int main()
{
    char a[200];
    while(~scanf("%s",a)){
        int dir=1;//0 1 2 3 东南西北
        int x=310,y=420;
        cout<<"300 420 moveto"<<endl<<"310 420 lineto"<<endl;
        int len = strlen(a);
        for(int i=0;i<len;i++)
        {
            if(a[i]=='A'){
                if(dir==0){
                    dir=1;
                    x+=10;
                    cout<<x<<" "<<y<<" lineto"<<endl;
                }
                else if(dir==1){
                    dir=2;
                    y-=10;
                    cout<<x<<" "<<y<<" lineto"<<endl;
                }
                else if(dir==2){
                    dir=3;
                    x-=10;
                    cout<<x<<" "<<y<<" lineto"<<endl;
                }
                else
                {
                    dir=0;
                    y+=10;
                    cout<<x<<" "<<y<<" lineto"<<endl;
                }
            }
            else
            {
                if(dir==0){
                    dir=3;
                    x-=10;
                    cout<<x<<" "<<y<<" lineto"<<endl;
                }
                else if(dir==1){
                    dir=0;
                    y+=10;
                    cout<<x<<" "<<y<<" lineto"<<endl;
                }
                else if(dir==2){
                    dir=1;
                    x+=10;
                    cout<<x<<" "<<y<<" lineto"<<endl;
                }
                else
                {
                    dir=2;
                    y-=10;
                    cout<<x<<" "<<y<<" lineto"<<endl;
                }

            }
        }
        printf("stroke\nshowpage\n");

    }

}

HDU 1042 大数

  • c++的大数我不会-----------------------
  • 用来java
public class oj {
	/*
	public int jisuan(int a,int b) {
		return a*b;
	}
	public String nameandage(int age,String name,int a,int b) {
		return name+"年纪"+age+"计算出"+a+"*"+b+"="+jisuan(a, b);
		
	}
	*/
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		
		while(in.hasNext()) {
			BigInteger n = BigInteger.ONE;//如果大数n定义在while外边,这里也要初始化一下
			int m=in.nextInt();
			while(m!=0) {
				n=n.multiply(BigInteger.valueOf(m--));
			}
		System.out.println(n);	
		}
		
		
		
			
		}
		
	
		
		
		

	

}

HDU 1007

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std;
int a[100006];
struct point
{
    
    double x;
    double y;
}p[100006];
int cmpx(const point &a,const point &b){
    //自定义排序参数
    return a.x < b.x;

}
int cmpy(const int &a,const int &b){
    //自定义排序参数
    return p[a].y < p[b].y;

}
double dis(int a,int b){
    //求两个点组成圆的直径
    return sqrt((p[a].x - p[b].x) * (p[a].x - p[b].x) + (p[a].y - p[b].y) * (p[a].y - p[b].y));
}
double min(double x,double y)//求两个double型数的较小的那个
{
    
    return x<y?x:y;
}
double fenzhi(int left , int right){
    
    if(left==right)
        return 100000;
    if(left+1==right){
    
        return dis(left,right);//求left和right两点组成圆的半径
    }
    int mid = (left+right)>>1;
    double ll=fenzhi(left,mid);//分治求左边
    double rr=fenzhi(mid,right);//分治求右边
    double lr=min(ll,rr);//最小的
    int k=0;
    for(int i=left;i<=right;i++){
    
        if(fabs(p[mid].x-p[i].x)<lr)
         {
    
             a[k]=i;
             k++;

         }
    }
    sort(a,a+k,cmpy);//按照y坐标排序,x相距小于d的再比较y放向
    for(int i=0;i<k-1;i++){
    
        for(int j=i+1;j<i+7&&j<k;j++){
    
            if(p[a[j]].y - p[a[i]].y >=lr)
                break;
            lr = min(lr,dis(a[i],a[j]));
        }
    }
    return lr;





}



int main()
{
    
    //半径最大的就是最近两点的距离的一半
int i,n;
    while(scanf("%d",&n) != 0)
    {
    
        if(!n)
            break;
        for( i = 0; i < n; i++ )
        {
    
            scanf("%lf %lf",&p[i].x,&p[i].y);
        }
        sort(p,p+n,cmpx);    //按x坐标排序
        printf("%.2f\n",fenzhi(0,n-1) / 2);
    }
    return 0;

}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42815711/article/details/104531138

智能推荐

python安装包下载太慢解决_狼头神的博客-程序员秘密

当我们需要下载python包的时候,默认是从境外镜像进行下载的,速度会很慢,如何我们下载jieba,使用下面命令:pip install jieba一个20M的文件包,可能需要大几分钟的时间。我们将镜像换成清华镜像,秒几就能完成任务。运行指令如下:pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple/...

python任务调度框架_任务调度利器:Celery_weixin_39611506的博客-程序员秘密

Celery是Python开发的分布式任务调度模块,今天抽空看了一下,果然接口简单,开发容易,5分钟就写出了一个异步发送邮件的服务。Celery本身不含消息服务,它使用第三方消息服务来传递任务,目前,Celery支持的消息服务有RabbitMQ、Redis甚至是数据库,当然Redis应该是最佳选择。安装Celery用pip或easy_install安装:$ sudo pip install Cel...

matlab实现离散数学,使用MATLAB的离散数学课程的项目想法?_香菜加馍的博客-程序员秘密

一般建议:The MathWorks有很多教学资源,可以给你一些课程的想法.一些示例链接:具体建议:我发现有趣的非线性动力学研究课题之一是Lorenz oscillators.洛伦兹振荡器是一个可以表现出混沌行为的三个变量的非线性系统.这样一个系统将为学生提供数学计算的机会(iterative methods,用于模拟微分方程系统,稳定性和收敛性等).这个项目最有趣的是我们使用Lorenz振荡器对...

元旦节,咱们一起过,一起送礼物_strongerHuang的博客-程序员秘密

关注+星标公众号,不错过精彩内容一、 前言大家好,我是『strongerHuang』黄工,这一年来,感谢大家对公众号的支持,但是感谢不能停留在嘴上,所以,这次邀请了正点原子赞助。一起给大...

Java8-15-Stream 收集器 01-归约与汇总+分组_老马啸西风的博客-程序员秘密

文章目录用流收集数据收集器的用途收集器简介收集器用作高级归约归约和汇总计算总数-counting查找流中的最大值和最小值-minBy maxByCollectors.maxBy汇总总数 Collectors.summingXXXsummingIntsummingLong summingDouble平均数-averagingXXX统一获取汇总信息-summarizingXXXsummarizingI...

随便推点

打印数字正方形_aoqiao7895的博客-程序员秘密

题目描述打印数字正方形输入描述输入一个整数n,1&lt;=n&lt;=31输出描述输出数字正方形。注意,每个数字占4个字符,右对齐,不全则补足空格;样例输入10样例输出 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 2...

判断两条线是否相交_weixin_34266504的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

pycharm 快捷键_奈何辰星无可奈的博客-程序员秘密

pycharm 快捷键提示CTRL Q: 在参数列表位置,显示可以输入的所有参数。CTRL Q: 查看选中方法的文档字符串阅读CTRL -: 折叠当前代码CTRL +: 展开当前代码CTRL SHIFT -: 折叠所有代码CTRL SHIFT +: 展开所有代码CTRL SHIFT F7: 将当前单词在整个文件中高亮,F3移动到下一个,ESC取消高亮。CTRL F11...

关于BIOS的那些事----不要老整三岁的脑筋急转弯,咱们来整点五岁的(中)_alZou的博客-程序员秘密

   现在来看第二部分,第二部分其实是把要用的模块文件压缩了一个接一个放在一起就行了。压缩算法的名字叫lh5,一提到算法,国内研究这种“低层次”东西的人就少了(大家都搞往窗体上拖放几个控件就能实现功能的高层次的应用程序)。好在我在国外的网站上无意中发现了lh5压缩算法的源码,用TC写的,我又从网上把TC这个老古董下载下来,最后居然编译成功了(当然做过一些修改),编译生成的文件名叫ar.exe(文中

user_index.js_programpoet的博客-程序员秘密

function fbxx(u_id){  //我发布的信息 //alert(u_id); document.body.style.overflow = hidden; document.body.style.height = document.documentElement.clientHeight + px; window.open(user_index_fbxx.jsp,_bl

百度地图api设置点的自定义图标不显示_weixin_30420305的博客-程序员秘密

百度地图api设置点的设置代码为:var myIcon = new BMap.Icon();所以首先要找到这行代码,并在括号中加上图片信息:var myIcon = new BMap.Icon("http://map.baidu.com/image/us_mk_icon.png", new BMap.Size(50,50));很多人使用过程中会发现如果百度地图的这...

推荐文章

热门文章

相关标签