以下题目标题就是此题题目链接,题目内容为了节省篇幅就不粘上去了。整套题的链接:https://acm.bnu.edu.cn/v3/contest_show.php?cid=8679#info 密码:7116

A. 进制转换

题意很明显,就不过多说明了。

此题需要注意的是n为32位整数,即int型,最好特判一下n为0的情况;还有如果n为负数,要提前输出一个负号。最后输出的时候逆着输出来,可以手动模拟一下二进制的转化过程。

#include <map>
#include <set>
#include <queue>
#include <stack>
#include <cmath>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include<functional>
using namespace std;
typedef long long LL;
#define pi 3.141592653
const int INF=1e9;
//const int N=100000+10;
char f[6]={'A','B','C','D','E','F'};//给定的R<=16,16进制到f就可以了;
char b[35];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
if(n<0)
{
printf("-");
n=-n;//将其转化为正数便于求解;
}
if(n==0)
{
printf("0\n");
continue;//直接进入下一层循环,不会继续往下执行了;
}
int len=0;//表示数组长度;
while(n)//这里也可以写成while(n!=0)
{
int x=n%m;
if(x<10)
b[len++]=x+'0';//加'0'表示转化成char型,可以查查ASCII表看看他们之间的关系;
else b[len++]=f[x-10];
n/=m;
}
for(int i=len-1;i>=0;i--)//注意要倒着输出;
printf("%c",b[i]);//只接了一条语句可以不用加中括号;
printf("\n");
}
}//每一条语句都是一个知识点,基础抓牢了才能更进一步!


                                                     B. 桌球游戏       

  题意很好懂,台面上剩余的球可得的分数R如果小于他们两个人的分差,那么分数小的即使把剩下的球全打进了也无济于事。注意分差为正数,这里就可以用abs()函数了,不会的自己百度去~~~
int main()//为了节省篇幅以上的头文件我就不贴出来了;
{
int t,a,b,r;//用a来表示SA选手的得分,
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&a,&b,&r);
if(abs(a-b)>r) printf("yes\n");
else printf("no\n");//只有两种情况
}
return 0;
}//代码是不是很简洁啊,多多刷题你也可以的!



                                                       C. 密码

     题意就是给你一个长度最多为50的字符串,字符类型只可能是那四类中的某一种,有两个判断条件,一是判长度符不符合8~16,二是判断这个字符串的所有字符至少有三种来自不同的类型,以上都满足则输出YES,输出的时候注意输出题目所给的,不要自己打成yes,Yes,No之类的,你完全可以复制题目所给的输出放到你的输出语句里。
    代码 一:
char s[55];//最大长度为50,数组空间应该稍微开大一点;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
int f1=0,f2=0,f3=0,f4=0;
int len=strlen(s);//此函数用来测字符串长度,书的144页,很实用。
if(len<8||len>16)
{
printf("NO\n");
continue;
}
else
{
for(int i=0;i<len;i++)//字符型数组是从0开始的到len-1正好len的长度;
{
if(s[i]>='A'&&s[i]<='Z') f1=1;//满足条件则将此变量赋为1表示真;
else if(s[i]>='a'&&s[i]<='z') f2=1;
else if(s[i]>='0'&&s[i]<='9') f3=1;
else f4=1;
}
if(f1+f2+f3+f4>=3)//至少满足4种字符里的3种;
printf("YES\n");
else printf("NO\n");
}
}
return 0;
}

代码二:

char s[55];//最大长度为50,数组空间应该稍微开大一点;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
int f1=0,f2=0,f3=0,f4=0;
int i;
for(i=0; s[i]!='\0'; i++) //字符串以'\0'结束,不计入总长度;
{
if(s[i]>='A'&&s[i]<='Z') f1=1;
else if(s[i]>='a'&&s[i]<='z') f2=1;
else if(s[i]>='0'&&s[i]<='9') f3=1;
else f4=1;//满足条件则将此变量赋为1表示真;
}
if((i<8||i>16)||(f1+f2+f3+f4<3))
printf("NO\n");
else printf("YES\n");
}
return 0;
}

 
                                                    D. box

        题意就是给定三个整数,要你判断用+ ,- ,* ,/ ,% ,是否能把这三个数联系起来!
        需要注意的就是题目并没有说数的范围,所以应该用long long型,还有只需判断+,*,%即可。除法这里有点小问题,用乘法更为保险。
        代码一:
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <cmath>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include<functional>
using namespace std;
typedef long long LL;
#define pi 3.141592653
const int INF=1e9;
int judge(long long x,long long y,long long z)
{
if(x+y==z) return 1;//return语句是整个函数的结束标志;
if(y!=0&&x%y==z) return 1;
if(x*y==z) return 1;
return 0;//以上都不符合则返回0表示假;
}
int main()
{
long long a,b,c;
while(~scanf("%I64d%I64d%I64d",&a,&b,&c))
{
int x1=judge(a,b,c);
int x2=judge(a,c,b);
int x3=judge(b,a,c);
int x4=judge(b,c,a);
int x5=judge(c,a,b);
int x6=judge(c,b,a);
if(x1||x2||x3||x4||x5||x6)//任何一种为真都可以;
printf("oh,lucky!\n");
else printf("what a pity!\n");
}
return 0;
}

        代码二:
int main()
{
long long a,b,c;
while(~scanf("%I64d%I64d%I64d",&a,&b,&c))
{
if(a+b==c||a+c==b||a-c==b||a*b==c||a-b==c||c*a==b||c*b==a||(b!=0&&(a%b==c||c%b==a))||(a!=0&&(c%a==b||b%a==c))||(c!=0&&(a%c==b||b%c==a)))
printf("oh,lucky!\n");
else printf("what a pity!\n");
}
return 0;
}



                                                       E. 整数解

         讲道理这个题应该都会的,就是一个解方程。判断有无整数解即可。如果你不会判断整数解,那就判断这个解是否满足所给出的条件。
        代码一:由于此题数据范围不是很大,可以采用暴力枚举的方法求解。
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0)
break;
int flag=0;
for(int i=-9999;i<=9999;i++)
{
if(i*(n-i)==m)
{
flag=1;
break;
}
}
if(flag)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}

       代码二:用求根公式判断有无整数解。
#include<stdio.h>
#include<math.h>
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0)
break;
double b1=(n+sqrt(n*n-4*m))/2;
double b2=(n-sqrt(n*n-4*m))/2;
if((int)b1==b1||(int)b2==b2)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}

       代码三:判断是否符合条件。
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <cmath>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include<functional>
using namespace std;
typedef long long LL;
#define pi 3.141592653
const int INF=1e9;
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0)
break;
int temp=n*n-4*m;//求根公式;
if(temp<0)
{
printf("No\n");
continue;
}
int x1=(n-(int)sqrt(temp))/2;
int x2=(n+(int)sqrt(temp))/2;
if(x1*(n-x1)==m||x2*(n-x2)==m)//判断是否符合条件;
printf("Yes\n");
else printf("No\n");
}
return 0;
}

F. 矩形A + B

题意给你两个数表示网格的高和宽,图片可能加载不出来,原图:

这是一个2X4的网格,问里面有多少个矩形。很明显上图有30个。

那么怎么做呢,我们观察发现一个小矩形有两条横线和两条竖线(提示到这了,还不会就说不过去。 。。。)这就是一个组合问题嘛,总共n+1条横线,m+1条竖线。随便选两条都可以组成一个矩形。。

int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
printf("%d\n",(n+1)*n/2*(m+1)*m/2);
}
return 0;
}

G. 第二小整数

这道题考的就是一个排序问题,排好序后直接输出第二个数即可。可以用冒泡排序、选择排序、sort()函数。

       代码一:sort()函数,此函数默认从小到大排序。
int a[15];
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
printf("%d\n",a[1]);//下标从0开始所以a[1]是第二个;
}
return 0;
}

       代码二:冒泡排序:
int a[15];
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i-1;j++)
if(a[j]>a[j+1])
swap(a[j],a[j+1]);
}
printf("%d\n",a[1]);
}
return 0;
}


                                                 H. 分拆素数和

      给你并不是很大的整数问你将这个数拆分成不同的素数相加有多少种方法。
      那这题考察的就是一个素数判定问题。有两种方法:
      代码一:必须掌握
int judge(int x)
{
for(int i=2;i<=sqrt(x);i++)
if(x%i==0) return 0;
return 1;
}
int main()
{
int n;
while(~scanf("%d",&n)&&n)//这里也可以写成 &&n!=0
{
int ans=0;//注意每组数据的答案都要先初始化;
for(int i=2;i<=n/2;i++)
if(judge(i)&&judge(n-i)&&2*i!=n)//注意是不同的素数和;
ans++;
printf("%d\n",ans);
}
return 0;
}

       代码二:要求有点高,不过可以尝试理解
void init()//素数预处理打表便于查询;
{
memset(a,-1,sizeof(a));
a[0]=a[1]=0;
for(int i=2; i<N; i++)
if(a[i])
{
if(i>N/i) continue;
for(int j=i*i; j<N; j+=i)
a[j]=0;
}
}
int main()
{
init();
int n;
while(~scanf("%d",&n)&&n)
{
int ans=0;
for(int i=2; i<=n/2; i++)
if(a[i]&&a[n-i]&&i*2!=n)
ans++;
printf("%d\n",ans);
}
return 0;
}



                                                         I. 分数矩阵

样例基本上可以解释题意了,就问你怎么求出这个分数矩阵的值了。

其实仔细观察可以发现这是一个规律题的,找规律就好了。

int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
double ans=0;
for(int i=1;i<=n;i++)
{
if(i==1) ans+=n;
else ans+=2.0*(n-i+1)/i;
}
printf("%.2lf\n",ans);
}
return 0;
}

J. 最大公约数与最小公倍数

国庆的题的水平,用来签到的。最小公倍数等于两数之积除以最大公约数。用辗转相除法求最大公约数。也可以用递归求解,原理类似。

             代码一:
int gcd(int a,int b)
{
while(b)
{
int c=a%b;
a=b;
b=c;
}
return a;
}
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
int max_factor=gcd(n,m);
int min_dev=n*m/max_factor;
printf("%d %d\n",max_factor,min_dev);
}
return 0;
}
       代码二:递归
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
int max_factor=gcd(n,m);
int min_dev=n*m/max_factor;
printf("%d %d\n",max_factor,min_dev);
}
return 0;
}


       终于写到最后一题了。。。。。。。。。。。

                                                     K. 奇偶位互换           

所给的字符串已知长度是偶数,设为len,但字符数组下标从0开始,故最后一位len-1为奇数,len-2为偶数;要实现奇偶位互换,只需当遇到偶数位时先将后一位输出,再输出这一位。

char a[55];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",a);
int len=strlen(a);
for(int i=0;i<len;i++)
if(i%2==0)
{
printf("%c%c",a[i+1],a[i]);
}
printf("\n");
}
return 0;
}

本场联系题的全部题解呈上。本来这套题要给大家用来做周赛的,不过遇到点小问题,所以。。。。但如果大家把这套题吃透了,,,说明大家的水平又上了一级。希望大家认真对待。

《TC训练赛一》题解!的更多相关文章

  1. 《串并行数据结构与算法(SML语言)实验》题解

    注意:本题解仅供参考学习,请勿直接抄袭代码,否则造成的后果和笔者无关. 第一题: 题意: 对n个数升序排序. 题解: 快排,不解释. 代码(省略了输入输出函数,下同): val n = getInt ...

  2. 数据结构1:数据结构与算法C语言版分析概述

    本节开始将带领大家系统地学习数据结构,作为一门计算机专业大二学生的必修课程,该课程面对的目标人群为初步具备基本编程能力和编程思想的程序员(大一接触了 C 语言或者 C++).通过系统地学习数据结构,可 ...

  3. 数据结构与算法C语言实现笔记(1)--表

    声明:此一系列博客为阅读<数据结构与算法分析--C语言描述>(Mark Allen Weiss)笔记,部分内容参考自网络:转载请注明出处. 1.表 表是最简单的数据结构,是形如A1.A2. ...

  4. 数据结构与算法 Python语言实现 第一章练习

    说明:部分代码参考了Harrytsz的文章:https://blog.csdn.net/Harrytsz/article/details/86645857 巩固 R-1.1 编写一个Python函数 ...

  5. 《数据结构与算法(C语言版)》严蔚敏 | 第五章 建立二叉树,并完成三/四种遍历算法

    PS:所有的代码示例使用的都是这个图 2019-10-29 利用p126的算法5.3建立二叉树,并完成三种遍历算法 中序 后序 先序 #include<iostream> #include ...

  6. 《数据结构与算法Python语言描述》习题第二章第三题(python版)

    ADT Rational: #定义有理数的抽象数据类型 Rational(self, int num, int den) #构造有理数num/den +(self, Rational r2) #求出本 ...

  7. 《数据结构与算法Python语言描述》习题第二章第二题(python版)

    ADT Date: #定义日期对象的抽象数据类型 Date(self, int year, int month, int day) #构造表示year/month/day的对象 difference( ...

  8. 《数据结构与算法Python语言描述》习题第二章第一题(python版)

    题目:定义一个表示时间的类Timea)Time(hours,minutes,seconds)创建一个时间对象:b)t.hours(),t.minutes(),t.seconds()分别返回时间对象t的 ...

  9. 数据结构与算法C语言所有头文件汇总 —— 持续更新

    header.h // 顺序表的结构定义 #define Maxsize 100 //const int Maxsize = 100; // 预先定义一个足够大的常数 typedef struct { ...

  10. 《数据结构与算法(C语言版)》严蔚敏 | 第四章课本案例

    //二叉树的顺序存储表示 #define MAXTSIZE 100 typedef TElemtype SqBiTree[MAXTSIZE]; SqBiTree bt; //二叉树的二叉链表存储表示 ...

随机推荐

  1. MessageDigest简介(与MD5加密有关)

    参考文章:http://blog.sina.com.cn/s/blog_4f36423201000c1e.html 参考来源:http://blog.csdn.net/hudashi/article/ ...

  2. 【转】在 26 岁时写给 18 岁的自己--Livid

    原文:http://livid.v2ex.com/essays/2012/01/24/a-letter-from-26-to-18/ 我知道现在的自己是再也回不去的了.可是倘若有机会,我是多么希望能让 ...

  3. P1597 语句解析

    题目背景 木有背景…… 题目描述 一串(<255)PASCAL语言,只有a,b,c 3个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,未赋值的变量值为0.输出a,b,c 最终的值. ...

  4. springboot之项目打包

    通过win中的cmd或者idea中终端,打包并启动项目: 1.mvn package     [打包,在target中生成jar] 2.java -jar xxxxx.jar  [启动jar]

  5. Spring Boot 注册 Servlet 的三种方法,真是太有用了!

    本文栈长教你如何在 Spring Boot 注册 Servlet.Filter.Listener. 你所需具备的基础 什么是 Spring Boot? Spring Boot 核心配置文件详解 Spr ...

  6. Hive工具类

    Hive2.x的工具类,对常用方法进行了封装,其中设置了kerberos认证. package com.ideal.template.openbigdata.util; import java.sql ...

  7. JAVA自带的加密算法-MD5\SHA1\BASE64

    需要导入jar包: commons-codec.jar MD5 String str = "abc"; DigestUtils.md5Hex(str); SHA1 String s ...

  8. mysql踩坑记录之limit和sum函数混合使用问题

    问题复盘本次复盘会用一个很简单的订单表作为示例. 数据准备订单表建表语句如下(这里偷懒了,使用了自增ID,实际开发中不建议使用自增ID作为订单ID) CREATE TABLE `order` ( `i ...

  9. core 中使用 swagger

    引包 代码 public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddMvc().Set ...

  10. Java数据结构和算法(三)--三大排序--冒泡、选择、插入排序

    三大排序在我们刚开始学习编程的时候就接触过,也是刚开始工作笔试会遇到的,后续也会学习希尔.快速排序,这里顺便复习一下 冒泡排序: 步骤: 1.从首位开始,比较首位和右边的索引 2.如果当前位置比右边的 ...