杭电OJ之2020-2029(C语言版)
2020. 绝对值排序
题目
Problem Description
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。
Input
输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。
Output
对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。
Sample Input
3 3 -4 2
4 0 1 2 -3
0
Sample Output
-4 3 2
-3 2 1 0
代码
#include <stdio.h>
#include <stdlib.h>
int a[120];
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
if(n == 0) break;
for(int i=0;i < n; i++)
{
scanf("%d", &a[i]);
}
//冒泡排序
for(int i=0; i < n-1; i++)
for(int j=0; j < n-i-1; j++)
{
if(abs(a[j]) < abs(a[j+1]))
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
//打印a[i]
for(int i = 0; i < n; i++)
{
if(i == n-1) {printf("%d\n", a[i]); break;}
printf("%d ", a[i]);
}
}
return 0;
}
思路与总结
重点:排序算法
冒泡排序
关键代码如下:
//冒泡排序
for(int i=0; i < n-1; i++)
for(int j=0; j < n-i-1; j++)
{
if(abs(a[j]) < abs(a[j+1]))
//绝对值按从大到小排列,每次冒泡最小的(即把最小的放在最后)
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
2021. 发工资咯
题目
Problem Description
财务处的小胡老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?
这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
Input
输入数据包含多个测试实例,每个测试实例的第一行是一个整数n(n<100),表示老师的人数,然后是n个老师的工资。
n=0表示输入的结束,不做处理。
Output
对于每个测试实例输出一个整数x,表示至少需要准备的人民币张数。每个输出占一行。
Sample Input
3
1 2 3
0
Sample Output
4
代码
#include<stdio.h>
int main()
{
int i,j,n,t,k,s[6]={100,50,10,5,2,1};
while(~scanf("%d",&n),n) //逗号表达式
{
for(i=j=k=0;i<n;i++,j=0)
{
scanf("%d",&t);
while(t)
{
if(t<s[j]) j++;
else t-=s[j],k++;
}
}
printf("%d\n",k);
}
return 0;
}
思路与总结
逗号表达式
(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5,6+8)的值是14
2020.
题目
Problem Description
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
3
12ajf
fi8x_a
ff ai_2
Sample Output
no
yes
no
代码
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int n;
scanf("%d", &n);
getchar();
while (n--) {
char c, flag = 1;
c = getchar();
if (!(isalpha(c) || c == '_'))
flag = 0;
while ((c = getchar()) != '\n') {
if (!(isalnum(c) || c == '_'))
flag = 0;
}
printf("%s\n", flag ? "yes" : "no");
}
return 0;
}
思路与总结
按照字符流来处理,好好消化!
标识符输入结束判断语句:c = getchar()) != '\n'
2025. 查找最大元素
题目
Problem Description
对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串“(max)”。
Input
输入数据包括多个测试实例,每个实例由一行长度不超过100的字符串组成,字符串仅由大小写字母构成。
Output
对于每个测试实例输出一行字符串,输出的结果是插入字符串“(max)”后的结果,如果存在多个最大的字母,就在每一个最大字母后面都插入"(max)"。
Sample Input
abcdefgfedcba
xxxxx
Sample Output
abcdefg(max)fedcba
x(max)x(max)x(max)x(max)x(max)
代码
#include<stdio.h>
#include<string.h>
int main()
{
char max,str[101];
int len,i;
while(~scanf("%s",str))
{
len=strlen(str);
max='a';
for(i=0;i<=len-1;i++)
{
if(str[i]>max)
{
max=str[i];
}
}
for(i=0;i<=len-1;i++)
{
printf("%c",str[i]);
if(str[i]==max)
{
printf("(max)");
}
}
printf("\n");
}
return 0;
}
思路与总结
1. 找到最大字母
2. 在最大字母后,输出(Max)
2026. 首字母便大写
题目
Problem Description
输入一个英文句子,将每个单词的第一个字母改成大写字母。
Input
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
Output
请输出按照要求改写后的英文句子。
Sample Input
i like acm
i want to get an accepted
Sample Output
I Like Acm
I Want To Get An Accepted
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char a[105];
int i,len;
while(gets(a)!='\0')
{
len=strlen(a);
if(a[0]!=' ')
a[0]=a[0]-32;
for(i=1;i<len;i++)
{
if(a[i]!=' '&&a[i-1]==' ')
{
a[i]=a[i]-32;
}
}
puts(a);
}
return 0;
}
思路与总结
改变空格后的字母为大写,注意第一个
语法知识
gets:
gets能够接受空格、制表符Tab和回车等;
gets可接受回车键之前输入的所有字符,并用’\0’替代 ‘\n’.回车键不会留在输入缓冲区中
puts:
puts()在输出字符串时会将’\0’自动转换成’\n’进行输出,也就是说,puts方法输出完字符串后会自动换行。
2027. 统计元音
题目
Problem Description
统计每个元音字母在字符串中出现的次数。
Input
输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串。
Output
对于每个测试实例输出5行,格式如下:
a:num1
e:num2
i:num3
o:num4
u:num5
多个测试实例之间由一个空行隔开。
请特别注意:最后一块输出后面没有空行:)
Sample Input
2
aeiou
my name is ignatius
Sample Output
a:1
e:1
i:1
o:1
u:1
a:2
e:1
i:3
o:0
u:1
代码
# include <stdio.h>
# include <string.h>
int main()
{
int n, len;
char s[150];
while(scanf("%d", &n) != EOF && n != 0)
{
getchar();
while(n--)
{
gets(s);
int a_count = 0;int e_count = 0;int i_count = 0;int o_count = 0;int u_count = 0;
len = strlen(s);
for(int i=0;i < len; i++)
{
if(s[i] == 'a') a_count += 1;
if(s[i] == 'e') e_count += 1;
if(s[i] == 'i') i_count += 1;
if(s[i] == 'o') o_count += 1;
if(s[i] == 'u') u_count += 1;
}
printf("a:%d\n", a_count);
printf("e:%d\n", e_count);
printf("i:%d\n", i_count);
printf("o:%d\n", o_count);
printf("u:%d\n", u_count);
if(n) printf("\n");
}
}
return 0;
}
思路与总结
在做字符类型题目,注意scanf会引入一个'\n'换行符,必要时用getchar()吸收。
2028. Lowest Common Multiple Plus(最小公倍数)
题目
Problem Description
求n个数的最小公倍数。
Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
Sample Input
2 4 6
3 2 5 7
Sample Output
12
70
代码
//最小公倍数 = 两整数 / 最大公约数
#include <stdio.h>
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int lcm(int a,int b)
{
return a*b/gcd(a,b);
}
int main()
{
int a[100],n;
while(scanf("%d",&n)==1)
{
int i,y=1;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
//转换成两个比较,比较n-1轮
for(i=0;i<n-1;i++)
{
a[i+1]=lcm(a[i],a[i+1]);
}
printf("%d\n",a[i]);
}
return 0;
}
思路与总结
//最小公倍数 = 两整数 / 最大公约数
最大公约数(辗转相除法)--递归 重点
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
2020. Palindromes _easy version(回文串)
题目
Problem Description
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。
Input
输入包含多个测试实例,输入数据的第一行是一个正整数n,表示测试实例的个数,后面紧跟着是n个字符串。
Output
如果一个字符串是回文串,则输出"yes",否则输出"no".
Sample Input
4
level
abcde
noon
haha
Sample Output
yes
no
yes
no
代码
/* HDU2029 Palindromes _easy version */
#include <stdio.h>
#include <string.h>
int main(void)
{
int n, flag, start, end;
char a[4096];
scanf("%d", &n);
while(n--) {
// 读入字符串
scanf("%s", a);
// 判断是否为回文
start = 0;
end = strlen(a) - 1;
flag = 1;
while(start < end) {
if(a[end] != a[start]) {
flag = 0;
break;
}
start++;
end--;
}
// 输出结果
if(flag)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
思路与总结
判断回文,按照题意来就行
杭电OJ之2020-2029(C语言版)的更多相关文章
- C#利用POST实现杭电oj的AC自动机器人,AC率高达50%~~
暑假集训虽然很快乐,偶尔也会比较枯燥,,这个时候就需要自娱自乐... 然后看hdu的排行榜发现,除了一些是虚拟测评机的账号以外,有几个都是AC自动机器人 然后发现有一位作者是用网页填表然后按钮模拟,, ...
- 杭电oj 2095 & 异或^符号在C/C++中的使用
异或^符号,在平时的学习时可能遇到的不多,不过有时使用得当可以发挥意想不到的结果. 值得注意的是,异或运算是建立在二进制基础上的,所有运算过程都是按位异或(即相同为0,不同为1,也称模二加),得到最终 ...
- 用python爬取杭电oj的数据
暑假集训主要是在杭电oj上面刷题,白天与算法作斗争,晚上望干点自己喜欢的事情! 首先,确定要爬取哪些数据: 如上图所示,题目ID,名称,accepted,submissions,都很有用. 查看源代码 ...
- 杭电oj 4004---The Frog Games java解法
import java.util.Arrays; import java.util.Scanner; //杭电oj 4004 //解题思路:利用二分法查找,即先选取跳跃距离的区间,从最大到最小, // ...
- 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)
今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...
- 杭电oj————2057(java)
question:A+ B again 思路:额,没啥思路/捂脸,用java的long包里的方法,很简单,只是有几次WA,有几点要注意一下 注意:如果数字有加号要删除掉,这里用到了正则表达式“\\+” ...
- 爬取杭电oj所有题目
杭电oj并没有反爬 所以直接爬就好了 直接贴源码(参数可改,循环次数可改,存储路径可改) import requests from bs4 import BeautifulSoup import ti ...
- 杭电 OJ 提交代码需要注意的问题
杭电acm 提交代码需要注意的问题 1. 用 Java 的时候类名请用 Main 2. Java 提交出现 PE 的可能原因有 1) 最基本的错误是空格问题,比如注意每行的末尾是否输出空格 2) 用 ...
- 杭电OJ 输入输出练习汇总
主题 Calculate a + b 杭电OJ-1000 Input Each line will contain two integers A and B. Process to end of fi ...
随机推荐
- 【Win】编写简单的bat文件
bat是dos下的批处理文件.批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd. ...
- foreach循环赋值问题
foreach ($list as $key=>$val){ $data=array();//这一个一定要加上不然循环后,modify_one,modify_two都会赋值 if ($val[' ...
- 有趣的NaN类型
在学习Java集合的时候遇到了Float.isNaN(float)函数,点进去一看就不理解了,函数实现如下: public static boolean isNaN(float v) { return ...
- Myeclipse2014的Preview乱码问题
1.问题图样 2.问题探究:之前的版本没有这个问题,正常服务器部署也没有问题,而且改正了工程的编码设置 JSP的编码方式 3.问题解决:问题还是没有解决,最后找到了方法,似乎是跟本地编码反冲 选中pr ...
- LA 4670 Dominating Patterns (AC自动机)
题意:给定n个字符串和一个文本串,查找哪个字符串出现的次数的最多. 析:一匹配多,很明显是AC自动机.只需要对原来的进行修改一下,就可以得到这个题的答案, 计算过程中,要更新次数,并且要映射字符串.如 ...
- centos6 mysql 安装与配置
MySQL简介: 由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库.MySQL是一个多用户.多线程的关系型数据库管理 ...
- 20170908工作日记--UML画类图、HTTP协议、Volley源码走读
随手搜了一下,Android studio居然能够自动帮追我们生成UML的类图,简直太棒了http://www.gcssloop.com/course/UsePlantUMLInAS(Win),具体做 ...
- Tensorflow从源代码编译2
https://blog.csdn.net/qq_37674858/article/details/81095101 https://blog.csdn.net/yhily2008/article/d ...
- Python学习-39.Python中的生成器
先回顾列表解释 lista = range(10) listb = [elem * elem for elem in lista] 那么listb就将会是0至9的二次方. 现在有这么一个需求,需要存储 ...
- 微软DevOps软件开发高级培训课程(深圳站) 2016.04.06
深圳特区云集了国内众多大型IT企业,作为北上广深的一线城市,当之无愧! 我们在深圳同方信息港的微软办公室是举行培训,60人的培训教室,生生被挤满了80人,过道都被全部占用了.可惜由于换了电脑,把照片搞 ...