提示:多个题目的代码采用了C ++的写法,对应编译器选择G ++,请不要直接复制代码。

下周实验考试,GOOD LUCK! 感谢汪神提供E题C语言代码

所有题目已更新为C语言写法

所有题目已更新为C语言写法

所有题目已更新为C语言写法

题目总览

题号 题目 考察点 测试情况
A 整数移位 2 模拟 AC 87 ms 464 KB
B 约瑟夫环 模拟 AC 0 ms 492 KB
C 重排字符 排序 string.h使用 AC 0 ms 492 KB ——> AC 0 ms 448 KB
D 字符串 SET/MAP(STL)/数组 AC 0 ms 496 KB ——> AC 0 ms 444 KB
E 生成全排列 递归/STL AC 146 ms 492 KB——> AC 131 ms 444 KB
F 数组旋转 水题 AC 277 ms 532 KB
G 对称数 回文串 AC 14 ms 468 KB

A.整数移位 2

题意分析

模拟循环移位n次。这题AC rate 相当高,分析省(偷懒ing)。

代码总览

#include <stdio.h>
#include <string.h>
#define max 1005
void get(char* str)
{
int len = strlen(str);
int i;
if(len <= 1)
return;
char temp = str[len-1];
for(i=len-1; i>= 1; i--)
str[i] = str[i-1];
str[0] = temp;
}
void getn(char* str, int n)
{
int i;
if(!str)
return;
for(i=1; i<= n; i++)
get(str);
}
int main()
{
char str[max];
int n;
while(scanf("%s %d",str,&n) !=EOF){
getn(str,n);
printf("%s\n",str);
}
// shift_n(str,2);
// printf("%s",str);
return 0;
}

B.约瑟夫环

题意分析

给出人数n和每m个人出局,几个人来回报数,报到m的话那个人出局,并且从1接着开始报数。求这几个人出局的顺序。模拟报数即可。

用一个for循环来模拟报数,并且有计数器cnt,数组a,数组a用来模拟谁出局了,没出局a[i]=0,出局了a[i] = 1;每当找到一个a[i] = 0的时候,cnt++,表示1个人报数。直到cnt = m的时候,说明当前的人该出局了,将a[i]置为1,cnt初始化为0,输出i+1这个数字,并且将num++。每次循环先判断一下i是否等于n-1,若是表明该从第0个元素开始下一轮报数了;然后判断一下num是否等于n,若是,说明游戏里n个人都出局了,游戏结束。

因为测试数据有多组,写一个empty函数,把数组归零。

(这题是循环队列)

代码总览

#include <stdio.h>
#define max 105
int a[max];
void empty(int a[],int n){
int i;
for(i = 0;i<n;i++){
a[i] = 0;
}
}
int main()
{
int n,m;
while(scanf("%d %d",&n,&m) != EOF){
int i,cnt = 0,num = 0,flag = 0;
for(i = 0;i<n;i++){
if(a[i] == 0){
cnt++;
}
if(cnt == m){
if(a[i] == 0){
if(flag == 0){
flag = 1;
printf("%d",i+1);
}else{
printf(" %d",i+1);
}
num++;
a[i] = 1;
}
cnt = 0;
}
if(i == n-1){
i=-1;
}
if(num == n){
printf("\n");
break;
}
}
empty(a,n);
}
return 0;
}

C.重排字符

题意分析

已更新C语言写法

已更新C语言写法

已更新C语言写法

给出2个字符串,判断前一个是否为后一个的乱序。

对2个字符串按ASCII排序(升序降序均可),然后比较,若相同则输出Yes,否则输出No.

C语言:

①首先读入2个字符串

②通过sort函数分别对这2个字符串按照ASCII大小进行冒泡排序(当然这里也可以换成别的排序方法,插入排序,选择排序均可)。

③用strcmp函数比较这可两个字符串是否相等,若相等的话说明前一个即为后一个的乱序,否则就不是。注意,若相等strcmp函数返回值为0,否则为第一个不相等字符的ASCII之差。

C++:

使用string容器,用algorithm库里面的sort对每个字符排序,然后比较,判断即可。

代码总览

C语言版

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 500
void sort(char * s)//②
{
int len = strlen(s);
int i,j;
for(i = 0;i<len-1;i++){
for(j = 0;j<len-1-i;j++){
if(s[j]>s[j+1]){
swap(&s[j],&s[j+1]);
}
}
}
}
void swap(char *a,char*b)
{
char t;
t = *a;
*a = *b;
*b = t;
}
int main()
{
char s1[max],s2[max];
while(scanf("%s %s",s1,s2) != EOF){//①
sort(s1);
sort(s2);
if(strcmp(s1,s2) == 0){//③
printf("Yes\n");
}else{
printf("No\n");
}
}
return 0;
}

C++版

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string s1,s2;
int main()
{
cin.sync_with_stdio(false);
cin.tie(0);
while(cin>>s1>>s2){
sort(s1.begin(),s1.end());
sort(s2.begin(),s2.end());
if(s1.compare(s2) == 0){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}
return 0;
}

D.字符串

题意分析

已更新C语言写法

已更新C语言写法

已更新C语言写法

C写法参考汪神的思路

给出2个字符串,判断他们是否有相同的字符构成。

C语言:

①分别读入2个字符串

②通过get函数来统计他们的ASCII是否出现过,这里我还开了2个list数组,来记录他们的ASCII,若没出现过则为1,否则为0 (这里有优化的余地,因为ASCII 1-31均为控制字符,且32为空格,用%s是无法读入空白字符的,所以这里开128-32的数组就足够了,并且处理 的时候写s[i]-32即可,大家可以一试)

③通过judge函数来比对两个list是否每一位都相等,是的话说明他们均出现过,若有一位不相等,则说明他们有不同的字符。利用judge函数的返回值来输出对应结果。

④有多组数据,写clear函数清空2个list。

C++:

直接用map容器,对字符串每一个字符处理,处理完成后比对,如果查找的时候返回0说明不同,若查找均能找到,比较一下2个容器的size,size相同的话说明一定有相同字符构成。按照题目要求输出结果即可。

代码总览

C语言版

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 505
#define lmax 128//②
int list1[lmax],list2[lmax];//②
void get(char*s,int list[])//②
{
int len = strlen(s);
int i;
for(i = 0;i<len;i++){
list[s[i]] = 1;
}
}
int judge(int list1[],int list2[])//③
{
int i,flag = 1;
for(i = 0;i<lmax;i++){
if(list1[i] != list2[i]){
flag = 0;
break;
}
}
return flag;
}
void clear(int list1[],int list2[])//④
{
int i;
for(i = 0;i<lmax;i++){
list1[i] = list2[i] = 0;
}
}
int main()
{
char s1[max],s2[max];
while(scanf("%s %s",s1,s2) != EOF){//①
get(s1,list1);
get(s2,list2);//②
if(judge(list1,list2)){//③
printf("Yes\n");
}else{
printf("No\n");
}
clear(list1,list2);//④
}
return 0;
}

C++版

#include <iostream>
#include <map>
#include <stdio.h>
#include <string.h>
#define max 505
using namespace std;
typedef map<char,int> mp;
mp p,q;
int main()
{
char s1[max],s2[max];
while(scanf("%s %s",s1,s2)!= EOF){
int len = strlen(s1),i,flag = 0;
for(i = 0;i<len;i++){
p[s1[i]]++;
}
len = strlen(s2);
for(i = 0;i<len;i++){
q[s2[i]]++;
}
for(i = 0;i<len;i++){
if(p.count(s2[i]) == 0){
flag = 1;
break;
}
}
if(p.size() != q.size()){
flag = 1; }
if(flag == 0){
printf("Yes\n");
}else{
printf("No\n");
}
p.clear();
q.clear();
}
return 0;
}

E.生成全排列

题意分析

已更新C语言写法

已更新C语言写法

已更新C语言写法

无奈又用了STL。汪神太强了,感谢汪神分享C的写法

(本蒟蒻要好好学习一下了,等我拿个本先记上)

代码总览

C语言版

#include<stdio.h>
int n;
int f[10],s[10];
void make(int k)
{
if(k>n)
{
int i;
for(i=1;i<n;++i) printf("%d ",s[i]);
printf("%d\n",s[n]);
return ;
}
int i;
for(i=1;i<=n;++i)
if(!f[i])
{
s[k]=i;
f[i]=1;
make(k+1);
f[i]=0;
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
int i;
for(i=0;i<10;++i) s[i]=f[i]=0;
make(1);
}
return 0;
}

C++版

#include <iostream>
#include <stdio.h>
#include <string>
#include <algorithm>
#define max 10
using namespace std;
int a[10];
int main()
{
cin.sync_with_stdio(false);
cin.tie(0);
int n;
while(cin>>n){
int i;
for(i = 0;i<n;i++){
a[i] = i+1;
}
for(i = 0;i<n;i++){
if(!i){
printf("%d",a[i]);
}else{
printf(" %d",a[i]);
}
}
printf("\n");
while(next_permutation(a,a+n)){
for(i = 0;i<n;i++){
if(!i){
printf("%d",a[i]);
}else{
printf(" %d",a[i]);
}
}
printf("\n");
} }
return 0;
}

F.数组旋转

题意分析

先按题目给出n保存到一个二维数组里,然后按二维数组从右到左,从上到下的顺序输出数组即可。

代码总览

#include <stdio.h>
#define max 101
int a[max][max];
int main()
{
int n;
while(scanf("%d",&n) != EOF){
int i,j;
for(i = 0;i<n;i++){
for(j = 0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
for(i = n-1;i>=0;i--){
for(j = 0;j<n;j++){
if(j == 0){
printf("%3d",a[j][i]);
}else{
printf("%3d",a[j][i]);
} }
printf("\n");
}
}
return 0;
}

G.对称数

题意分析

给出n,求出[1,n]中的满足下列要求的整数:这个数的平方本身是回文数。

(回文数 比如 121,131,1331,123321,12321等等)

数据范围不大int即可(我还是使用了 long long),把这个数的平方算出来,并且把他的每一位保存到数组里。对数组进行回文串判断,并设置标志变量flag。根据flag判断是否为回文串。

代码总览

#include <stdio.h>
#define max 1001
int a[max];
int main()
{
long long temp,temp1;
int n;
while(scanf("%d",&n)!= EOF){
int i;
for(i = 1;i<=n;i++){
temp1 = temp = i * i;
int k = 0,j,judge = 0;
while(temp1){
a[k] = temp1%10;
temp1/= 10;
k++;
}
for(j = 0;j<k/2;j++){
if(a[j] != a[k-1-j]){
judge = 1;
break;
}
}
if(!judge){
printf("%2d%11lld\n",i,temp);
}
}
}
return 0;
}

AOJ.综合训练.2016-12-8的更多相关文章

  1. mysql查询练习题-2016.12.16

    >>>>>>>>>> 练习时间:2016.12.16 编辑时间:2016-12-20-->22:12:08 题: 涉及:多表查询.ex ...

  2. 关于2016.12.12——T1的反思:凸包的意义与应用

    2016.12.12 T1 给n个圆,保证圆圆相离,求将圆围起来的最小周长.n<=100 就像上图.考场上,我就想用切线的角度来做凸包.以圆心x,y排序,像点凸包一样,不过用两圆之间的下切线角度 ...

  3. U3D笔记11:47 2016/11/30-15:15 2016/12/19

    11:47 2016/11/30Before you can load a level you have to add it to the list of levels used in the gam ...

  4. rhel 7.0 配置centos yum源(2016/12/8),成功!

    1.首先查看redhat 7.0系统本身所安装的那些yum 软件包: rpm -qa | grep yum #列出所有已安装的yum包 2.删除这些包: rpm -e *.rpm --nodeps # ...

  5. 更新日志(建议升级到2016.12.17) && 更新程序的方法

    更新程序的方法: 1,在控制面板里点击备份当前数据库文件到磁盘,把当天获取的信息从内存写到磁盘/存储卡.2,下载最新版的源码 wget -O "infopi.zip" " ...

  6. Oracle中把一个DateTime的字符串转化成date类型。to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'),

    Oracle中把一个DateTime或者该形态字符串转化成date类型. to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'), 或者: sele ...

  7. My latest news(--2016.12.31)

    2016.12.31  前一天晚上看 “纪实新闻” ,白天看视频,晚上刷题,看电影<湄公河行动> 2016.12.30 18:36 昨天上午考完了本学期的最后一门课程,下午乒乓+值班,今天 ...

  8. AOJ.综合训练.2016-11-24

    AOJ.综合训练 友情提示:不要复制粘贴,看完解析先自己尝试写一下.不行再看题解.这样才会有提高! A题 金字塔 题意分析 分别读入10个数,按照他给出的格式输出就行了.注意每有7个字符(包括空格). ...

  9. 读书笔记:《人有人的用处》------N.维纳. (2016.12.28)

    读书笔记:<人有人的用处>------N.维纳 ·某些系统可以依其总能量而和其他系统区别开来. ·在某些情况下,一个系统如果保持足够长时间的运转,那它就会遍历一切与其能量相容的位置和动量的 ...

  10. 【读书笔记】2016.12.10 《构建高性能Web站点》

    本文地址 分享提纲: 1. 概述 2. 知识点 3. 待整理点 4. 参考文档 1. 概述 1.1)[该书信息] <构建高性能Web站点>: -- 百度百科 -- 本书目录: 第1章 绪论 ...

随机推荐

  1. ElasticSearch搜索引擎安装配置中文分词器IK插件

    近几篇ElasticSearch系列: 1.阿里云服务器Linux系统安装配置ElasticSearch搜索引擎 2.Linux系统中ElasticSearch搜索引擎安装配置Head插件 3.Ela ...

  2. Spring全局变量

    压测spring框架的webservice接口,大并发量下响应值与预期值不一致 经查,开发在类中使用全局变量导致: springmvc核心控制器DispatcherServlet 默认为每个contr ...

  3. Laxcus大数据管理系统2.0(6)- 第四章 数据计算

    第四章 数据计算 Laxcus所有数据计算工作都是通过网络实施.相较于集中计算,在网络间进行的数据计算更适合处理那些数据量大.复杂的.耗时长的计算任务.能够实施网络计算的前提是数据可以被分割,就是把一 ...

  4. LeetCode 145 ——二叉树的后序遍历

    1. 题目 2. 解答 2.1. 递归法 定义一个存放树中数据的向量 data,从根节点开始,如果节点不为空,那么 递归得到其左子树的数据向量 temp,将 temp 合并到 data 中去 递归得到 ...

  5. The Activation Function in Deep Learning 浅谈深度学习中的激活函数

    原文地址:http://www.cnblogs.com/rgvb178/p/6055213.html 版权声明:本文为博主原创文章,未经博主允许不得转载. 激活函数的作用 首先,激活函数不是真的要去激 ...

  6. Microservices with Spring Boot

    找到一套比较不错的Spring Boot/Cloud入门教程,推荐一下. https://dzone.com/users/1041459/ranga_pec.html

  7. 三:Fair Scheduler 公平调度器

    参考资料: http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/FairScheduler.html http://h ...

  8. Centos6更新yum repo

    163开源镜像站是国内比较老的一个网站.很多人都在使用. step 1/3 备份原镜像文件: cd /etc/yum.repos.d mv CentOS-Base.repo CentOS-Base.r ...

  9. [mongodb]child process failed, exited with error number 100

    Run the following command first to start the mongo server mongod run --config /usr/local/etc/mongod. ...

  10. HTML5form表单的相关知识总结

    首先在介绍HTML5form表单的新增内容之前,我总结了一下HTML的form表单的内容. <!DOCTYPE html> <html lang="en"> ...