程序设计实践练习(执行,暴力)2

Problem A Balloon

题目描述
ICPC比赛当你过了一道题以后,会发一个标识这道题颜色的气球。 现给你2个队过的气球的颜色,求他们都过了的气球是哪些?
输入
第一行是一个整数K,表示样例的个数(K≤100)。 每个样例的第一行是两个整数N和M,1≤N,M≤100000,表示两个队分别过题的数量; 第二、三行分别是N和M个有序的整数Xi和Yi,0≤Xi,Yi≤109,表示气球的颜色。 输入数据保证集合{Xi}和{Yi}的元素都是唯一的,且两个集合一定存在交集
输出
每个样例输出两行,第一行输出相同的过题数目S,第二行按升序输出S个整数,每个整数之间空一个空格。
样例输入
2
3 3
1 2 3
1 2 3
3 2
1 2 3
2 3
样例输出
3
1 2 3
2
2 3

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

int teamn[N];
int teamm[N];
int same[N];

int main(){
    int k,n,m,i,j,cnt;
    //memset(same,0,sizeof(same));
    scanf("%d",&k);
    while(k--){
        cnt=0;
        scanf("%d %d",&n,&m);
        for(j=0;j<n;j++)scanf("%d",&teamn[j]);
        for(i=0;i<m;i++)scanf("%d",&teamm[i]);
        i=0;
        j=0;
        while(j<n&&i<m){
                if(teamm[i]>teamn[j])j++;
                else if(teamm[i]==teamn[j]){
                    same[cnt++]=teamm[i];
                    i++;
                    j++;
                }
                else 
                    i++;
            }
        printf("%d\n",cnt);
        for(i=0;i<cnt-1;i++)printf("%d ",same[i]);
        printf("%d\n",same[cnt-1]);
    }
    return 0;
}

Problem B 算术题

题目描述
小明在做加减法的算术题,有些题他不会做,那么他会不填答案,有些题可能做错了。 请你写个程序,判断一下小明作对了几道题?
输入
每行一个算术式,形如a+b=c,a-b=c,a+b=,a-b=。0≤a,b,c≤100
输出
输出正确的题目数。
样例输入
1+1=2
1+2=4
2-1=1
2-2=
3+6=
样例输出
2

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

char s[50];

int main(){  
    int d1,d2,d3;
    int cnt=0;
    char op,op2;
    while(gets(s)){
        sscanf(s,"%d%c%d%c%d",&d1,&op,&d2,&op2,&d3);
        switch(op){
            case '+':if(d1+d2==d3)cnt++;break;
            case '-':if(d1-d2==d3)cnt++;break;
        } 
        d3=0x3f3f3f3f;          //无穷大 
        memset(s,0x3f,sizeof(s)); //or memset(s,'\0',sizeof(s);
    }
    printf("%d\n",cnt); 
    return 0;
}
}

Problem C Eason

题目描述
Eason是个非常迷信的人,他喜欢数字3和6,不喜欢4和7。 如果一个数字的数码中没有4和7,而有3或者6的话,他就会喜欢这个数字。 比如,他会喜欢13,36,但是不会喜欢14,34。但对于28这种的,他就无所谓喜欢还是不喜欢。 Eason想知道区间[a,b]中一共有多少个他喜欢和不喜欢的数字?
输入
每行输入一个样例,为a和b,0≤a≤b≤106。如果a和b都为0,那么输入结束,这个样例不需要处理。
输出
每行输出一个样例的结果,先输出喜欢数字的个数,再输出不喜欢数字的个数
样例输入
1 10
1 100
1 1000000
0 0
样例输出
2 2
28 36
215488 737856

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

int like[N];
int dislike[N];
int a[N];
int d=0,l=0;

void judge(){
    int m;
    for(int i=0;i<N;i++){
        int flag=0;
        int n=i;
        while(n){
            m=n%10;
            n=n/10;
            if(m==4||m==7){
                flag=1;
                break;
            }
            else if(m==3||m==6){
                flag=-1;
                continue;
            }
            else 
                continue;
        }
        a[i]=flag;
    }
    for(int i=0;i<N;i++){
        if(a[i]==1){
            dislike[i]=++d;
            like[i]=l;
        }
        else if(a[i]==-1){
            dislike[i]=d;
            like[i]=++l;
        }
        else{
            dislike[i]=d;
            like[i]=l;
        }
    }
} 


int main(){
    judge();
    int a,b;
    while(scanf("%d %d",&a,&b)&&a!=0&&b!=0){
        if(a!=0)printf("%d %d\n",like[b]-like[a-1],dislike[b]-dislike[a-1]);
        if(a==0)printf("%d %d\n",like[b],dislike[b]);
    }
    return 0;
}

Problem D 最大子段和

题目描述
给你一个数列a1,a2,…,an,求m个连续数字组成的子段和最大值。
输入
有多个样例,每个样例的第一行是两个整数n和m,(1≤m≤n;≤100,000)。如果n和m为0表示输入结束,这个样例不需要处理。第二行是n个整数ai,0≤ai≤10000。
输出
每行输出一个整数,即样例的结果。
样例输入
6 3
1 2 3 4 5 6
6 3
1 2 3 3 2 1
0 0
样例输出
15
8

#include<bits/stdc++.h>
#define N 100001

using namespace std;

int a[N];
int s[N];

int main(){
    int m,n;
    while(scanf("%d %d",&n,&m)&&n!=0&&m!=0){
        s[m-1]=0;
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
            if(i==m-1){
                for(int j=0;j<m;j++)s[i]+=a[j];
                s[0]=s[i];
            }
            else {
                s[i]=s[i-1]+a[i]-a[i-m];
                if(s[i]>s[0])s[0]=s[i];
            }
        }
        printf("%d\n",s[0]);
    }
    return 0;
}

Problem E ASCII

题目描述
给你一段ASCII编码的文字,输出其每个字符的ASCII码。
输入
一段文字,由ASCII码字符组成。
输出
先输出行号,行号为16进制,占5位,从0开始计数,行号前导为0,然后空一格。 每行最多输出32个字符的ASCII码,每个ASCII码为16进制,占2位,前导为0,中间用空格隔开。 所有16进制使用大写A~F表示10~15。最后一行行末无空格,无换行。
样例输入
ACM International Collegiate Programming Contest,
I LOVE YOU
Lotus is a mystic symbol.
样例输出
00000 41 43 4D 20 49 6E 74 65 72 6E 61 74 69 6F 6E 61
00001 6C 20 43 6F 6C 6C 65 67 69 61 74 65 20 50 72 6F
00002 67 72 61 6D 6D 69 6E 67 20 43 6F 6E 74 65 73 74
00003 2C 0A 49 20 4C 4F 56 45 20 59 4F 55 0A 4C 6F 74
00004 75 73 20 69 73 20 61 20 6D 79 73 74 69 63 20 73
00005 79 6D 62 6F 6C 2E 20 0A

#include<bits/stdc++.h>

using namespace std;

char s[10001];

int main(){
    int cnt=0;
    int n=0;
    char a[10001];
    while(gets(a)!=0){
        n=strlen(a);
        for(int i=0;i<n;i++)s[cnt++]=a[i];
        s[cnt++]='\n';
    }
    for(int i=0;i<float(strlen(s)/16.0);i++){
        printf("%05X",i);
        for(int j=0;j<16&&16*i+j<strlen(s);j++)printf(" %02X",s[16*i+j]);
        if(i<=float(strlen(s)/16)-1)printf("\n");
    }
    return 0;
} 

Problem F Tourist 1

题目描述
Eric喜欢旅行,今年暑假终于可以有几天时间出去玩了。他计划在去3个不同的城市,而且不想重复去相同的城市,最后回到出发的城市,他想知道怎么走可以让差旅费用降到最低? 我们把城市编号为0~3,Eric总从0号城市出发
输入
第一行是一个整数K,表示样例的个数。 每个样例占4行,每行4个整数Xij,第i行第j列个整数表示从城市i到城市j所需要的旅费,单次费用不超过1000。i = j 时,Xij = 0。
输出
每行输出一个样例的结果,包括两行,第一行是差旅的总费用,第二行是3个城市的编号序列,每个城市编号之间用一个空格隔开,表示旅行的路线,如果存在多条线路都是最少花费,请输出字典序输出这些线路,每个线路一行。
样例输入
1
0 1 1 1
2 0 2 2
3 3 0 3
4 4 4 0

样例输出
10
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

#include<bits/stdc++.h>

using namespace std;

int main(){
    int n;
    int cnt;
    int s[4][4];
    scanf("%d",&n);
    while(n--){
        for(int i=0;i<4;i++){
            for(int j=0;j<4;j++){
                scanf("%d",&s[i][j]);
            }
        }
        int sum=0;
        int min=4001;
        int m[6][3];
        for(int i=1;i<4;i++){
            for(int j=1;j<4;j++){
                if(i==j)continue;
                for(int k=1;k<4;k++){
                    if(k==i||k==j)continue;
                    sum=s[0][i]+s[i][j]+s[j][k]+s[k][0];
                    if(sum>min)continue; 
                    if(sum<min){
                        min=sum;
                        cnt=0;
                        m[cnt][0]=i;
                        m[cnt][1]=j;
                        m[cnt][2]=k;
                        cnt++;
                    }
                    else if(sum==min){
                        m[cnt][0]=i;
                        m[cnt][1]=j;
                        m[cnt][2]=k;
                        cnt++;
                    }
                }
            }
        }
        printf("%d\n",min);
        for(int i=0;i<cnt;i++){
            for(int j=0;j<3;j++){
                printf("%d",m[i][j]);
                if(j<2)printf(" ");
            }
            printf("\n");
        }   
    }
}

Problem G 电话号码-隐去的字符

题目描述
电视上经常需要显示用户的手机号码,可是一般为了保留用户的隐私,会将中间的4位数字用“*”代替。
现在给你一个电话号码,请输出代替后的电话号码。
输入
第一行是一个整数K,表示样例的个数。 以后每行一个手机号码,一共11位。
输出
每行输出一个结果。
样例输入
2
13112345678
13198765432
样例输出
131****5678
131****5432

#include<bits/stdc++.h>

using namespace std;

int main(){
    char s[15];
    int n;
    scanf("%d",&n);
    while(n--){
        scanf("%s",&s);
        for(int i=0;i<strlen(s);i++){
            if(i<3||i>6)printf("%c",s[i]);
            else printf("*");
        }
        printf("\n");
    }
    return 0;
} 

Problem H 湘潭大学

题目描述
湘潭大学简称“XTU”,作为即将成为湘大的一份子,怎么不能为湘大添砖加瓦了?现在给你一个字符串,请你计算一下,从中选取字符,最多能组成多少个“XTU”?
输入
第一行是一个整数K,表示样例的个数。 以后每行一个字符串,字符串只包含英文大写字母,长度不会超过1000。
输出
每行输出一个样例的结果。
样例输入
3
XTUUTX
ABCDEFGHIJKLMNOPQRSTUVWXTZ
XXXTTT
样例输出
2
1
0

#include<bits/stdc++.h>

using namespace std;

int main(){
    int n;
    int x,t,u;
    int m;
    char s[1002];
    scanf("%d",&n);
    while(n--){
        scanf("%s",s);
        x=0;
        t=0;
        u=0;
        for(int i=0;i<strlen(s);i++){
            switch(s[i]){
                case 'X':x++;break;
                case 'T':t++;break; 
                case 'U':u++;break;
            }
        }
        m=min(x,t);
        m=min(m,u);
        printf("%d\n",m);
    }
    return 0;
}

Problem I 勾股数

题目描述
勾股数是指满足a2+b2=c2的正整数,比如最有名的“勾三股四弦五”。
现在给你两个正整数,请问是否存在另外一个正整数,使其成为“勾股数”?
输入
第一行是一个整数K,表示样例的个数。 以后每行一个样例,为两个整数x,y,(1≤x,y≤10000)。
输出
每行输出一个样例的结果。如果不能构成勾股数,输出“None”,如果存在多个,输出最小的那个。
样例输入
3
3 4
2 6
12 13
样例输出
5
None
5

#include<bits\stdc++.h>

using namespace std;

int main(){
    int n;
    int a,b,c,d;
    scanf("%d",&n);
    while(n--){
        scanf("%d %d",&a,&b);
        c=a*a+b*b;
        d=max(a,b)*max(a,b)-min(a,b)*min(a,b);
        //printf("%d %d %d %d\n",c,d,(int)sqrt(c),(int)sqrt(d));
        if(((int)sqrt(c)*(int)sqrt(c)==c)&&((int)sqrt(d)*(int)sqrt(d)==d)&&(c>0)&&(d>0))printf("%d\n",(int)sqrt(d));
        else if((int)sqrt(c)*(int)sqrt(c)==c&&c>0)printf("%d\n",(int)sqrt(c));
        else if((int)sqrt(d)*(int)sqrt(d)==d&&d>0)printf("%d\n",(int)sqrt(d));
        else printf("None\n");
    }
    return 0;
} 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java语言程序设计编程练习是指针对Java语言进行编程训练和实践的活动。通过这种练习,可以加深对Java语言的理解,并提升编程能力。 在Java语言程序设计编程练习中,可以选择不同的题目或项目进行实践。这些题目或项目可以根据难度分为初级、中级和高级,以满足不同程度的学习和训练需求。 在练习过程中,可以通过编写各种类型的程序,例如控制台应用程序、图形用户界面(GUI)应用程序和Web应用程序等。这些程序可以涉及到不同的主题和功能,如算法实现、数据结构、数据库连接、网络通信等等。 通过进行Java语言程序设计编程练习,可以不断提高解决问题的能力和编码技巧。在每个练习中,可以通过分析问题、设计程序结构、编写代码和调试等步骤,逐渐提高在使用Java语言进行程序设计和开发方面的能力。 同时,参与Java语言程序设计编程练习还可以为接下来的工作或学习提供更好的准备。无论是从事软件开发工作,还是进行进一步的学术研究,Java语言程序设计编程练习都可以帮助培养良好的编程思维和解决问题的能力。 综上所述,Java语言程序设计编程练习是一种有益的学习和提升编程能力的活动。通过不断的练习实践,可以不断提高编程技巧和解决问题的能力,为后续的工作和学习打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值