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语言版)的更多相关文章

  1. C#利用POST实现杭电oj的AC自动机器人,AC率高达50%~~

    暑假集训虽然很快乐,偶尔也会比较枯燥,,这个时候就需要自娱自乐... 然后看hdu的排行榜发现,除了一些是虚拟测评机的账号以外,有几个都是AC自动机器人 然后发现有一位作者是用网页填表然后按钮模拟,, ...

  2. 杭电oj 2095 & 异或^符号在C/C++中的使用

    异或^符号,在平时的学习时可能遇到的不多,不过有时使用得当可以发挥意想不到的结果. 值得注意的是,异或运算是建立在二进制基础上的,所有运算过程都是按位异或(即相同为0,不同为1,也称模二加),得到最终 ...

  3. 用python爬取杭电oj的数据

    暑假集训主要是在杭电oj上面刷题,白天与算法作斗争,晚上望干点自己喜欢的事情! 首先,确定要爬取哪些数据: 如上图所示,题目ID,名称,accepted,submissions,都很有用. 查看源代码 ...

  4. 杭电oj 4004---The Frog Games java解法

    import java.util.Arrays; import java.util.Scanner; //杭电oj 4004 //解题思路:利用二分法查找,即先选取跳跃距离的区间,从最大到最小, // ...

  5. 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)

    今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...

  6. 杭电oj————2057(java)

    question:A+ B again 思路:额,没啥思路/捂脸,用java的long包里的方法,很简单,只是有几次WA,有几点要注意一下 注意:如果数字有加号要删除掉,这里用到了正则表达式“\\+” ...

  7. 爬取杭电oj所有题目

    杭电oj并没有反爬 所以直接爬就好了 直接贴源码(参数可改,循环次数可改,存储路径可改) import requests from bs4 import BeautifulSoup import ti ...

  8. 杭电 OJ 提交代码需要注意的问题

    杭电acm 提交代码需要注意的问题 1. 用 Java 的时候类名请用 Main 2. Java 提交出现 PE 的可能原因有 1) 最基本的错误是空格问题,比如注意每行的末尾是否输出空格 2) 用 ...

  9. 杭电OJ 输入输出练习汇总

    主题 Calculate a + b 杭电OJ-1000 Input Each line will contain two integers A and B. Process to end of fi ...

随机推荐

  1. Linux的简单介绍和开发基本运维时候用到的命令

    先简单介绍下Linux文件夹目录 1./ linux下的根目录 实际上等同于window的我的电脑点进去 2./etc /usr 一个是系统配置文件存放的地方,一个是系统资源(应用程序)放的地方这俩文 ...

  2. KbmMW 4.5 发布

    We are happy to announce the release of kbmMW v. 4.50.00 Professional, Enterprise and CodeGear Editi ...

  3. Devexpress VCL Build v2014 vol 14.1.4 发布

    虽然这次没加什么新东西,但是及时更新支持xe7,还算可以. What's New in 14.1.4 (VCL Product Line)   New Major Features in 14.1 W ...

  4. Android 长时间运行任务说明

    android 4.0 后,小米手机需要授权 自动启动 (在安全中心权限里设置),不然AlarmManager设置系统闹钟将不起作用

  5. [转]谈谈 Mifare Classic 破解

    Mifare Classic 提供 1 Kb - 4Kb 的容量,现在国内采用的多数是 Mifare Classic 1k(S50)[后面简称 M1 卡] M1 卡有从 0 到 15 共 16 个扇区 ...

  6. Object-C中 - self 和super 的含义

    //super:父类         //self:自己              //自己理解         //以MobilePhone为例,父类为NSObject         //在类方法 ...

  7. Exception in thread Thread-3:第三个线程意外

    Status:Executing -train.py 02/09/2019 09:33:38 INFO Log level set to: INFO Using TensorFlow backend. ...

  8. float 为什么不能用== ,或者大于等于,或者小于等于

    本文尝试着将以下内容做一个浅显的解释,主要包括浮点数为什么是不精确的,浮点数为什么不能用==和!=直接比较,以及浮点数的比较方法等几个方面.如果那个地方说的不对还请各位看官不吝赐教!欢迎大家评论区讨论 ...

  9. RabbitMQ 初探

    有哪些优点 可靠性:RabbitMQ 提供了多种技术可以让你在性能和可靠性之间进行权衡.这些技术包括持久性.投递确认.发布者证实和高可用性. 灵活的路由:提供了多种内置交换机类型.如果你有更复杂的路由 ...

  10. 团队作业第四周(HCL盐酸队)——项目冲刺(第一篇)

    任务认领情况: 1.坦克类实现:李密,卢泰佑 2.子弹类,线程类实现:黄国航 赖少勇 3.画笔类,地图的实现:陈舒标  黄宇航 明日任务安排: 今天在通过已经购买的GUI书籍的帮助下,已经实现了界面的 ...