hdu oj最基础100题(2020-2029题)
题目地址:http://acm.hdu.edu.cn/listproblem.php?vol=11
本博文旨在帮助部分跨考生从初试踏入复试,大家加油hhhhh
本内容编写过程中仅使用最基本的c语言知识,不使用c++库
文章目录
2020.绝对值排序
#include<stdio.h>
#include<math.h>
#include<string.h>
// 交换
void swap(int &x, int &y){
int tmp = x;
x = y;
y = tmp;
}
// 数组分割为2部分
int patition(int *a, int low, int high){
int tmp = a[low]; //取当前区域最左边为基准元素
while (low < high) {
// 当队尾的元素小于等于基准数据时,向前挪动high指针
while (low < high && abs(a[high]) <= abs(tmp)) {
high--;
}
// 如果队尾元素小于tmp了,需要将其赋值给low
a[low] = a[high];
// 当队首元素大于等于tmp时,向前挪动low指针
while (low < high && abs(a[low]) >= abs(tmp)) {
low++;
}
// 当队首元素大于tmp时,需要将其赋值给high
a[high] = a[low];
}
// 跳出循环时low和high相等,此时的low或high就是tmp的正确索引位置
// 由原理部分可以很清楚的知道low位置的值并不是tmp,所以需要将tmp赋值给a[low]
a[low] = tmp;
return low; // 返回tmp的正确位置
}
// 快速排序
void quickSort(int *a, int left, int right){
if(left >= right) return;
int mid = patition(a, left, right);
quickSort(a, left, mid - 1);
quickSort(a, mid + 1, right);
}
int main(){
int n;
int a[105];
while(~scanf("%d", &n), n){
memset(a,0,sizeof(a));
for(int i=0;i<n;i++){
scanf("%d", &a[i]);
}
quickSort(a, 0, n - 1);
for(int i=0;i<n;i++){
if(i == n - 1) printf("%d\n", a[i]);
else printf("%d ", a[i]);
}
}
return 0;
}
2021.发工资咯:)
#include<stdio.h>
#include<math.h>
#include<string.h>
int main(){
int n;
int a[6] = {100, 50, 10, 5, 2, 1};
while(~scanf("%d", &n), n){
int ans = 0, tmp, x;
for(int i=0;i<n;i++){
tmp = 0;
scanf("%d", &x);
for(int j=0;j<6;j++){
tmp = tmp + x / a[j];
x = x % a[j];
}
ans = ans + tmp;
}
printf("%d\n", ans);
}
return 0;
}
2022.海选女主角
#include<stdio.h>
#include<math.h>
#include<string.h>
int main(){
int n, m;
while(~scanf("%d %d", &n, &m)){
int x, y, tmp = 0;
int a[105][105];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d", &a[i][j]);
if(tmp < abs(a[i][j])){
tmp = abs(a[i][j]);
x = i;
y = j;
}
}
}
printf("%d %d %d\n", x, y, a[x][y]);
}
return 0;
}
2023.求平均成绩
#include<stdio.h>
#include<math.h>
#include<string.h>
int main(){
int n, m;
// a记录每个学生每门课的成绩,b记录每门课的平均成绩, c记录每个人平均分
double a[55][6], b[6], c[55];
int flag, ans;
while(~scanf("%d %d", &n, &m)){
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
ans = 0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%lf", &a[i][j]);
b[j] = b[j] + a[i][j];
}
}
for(int i=0;i<m;i++){
b[i] = b[i] / n;
}
// flag标记是否各科成绩均大于等于平均成绩
for(int i=0;i<n;i++){
flag = 0;
for(int j=0;j<m;j++){
if(a[i][j] < b[j]) flag = 1;
c[i] = c[i] + a[i][j];
}
c[i] = c[i] / m;
if(!flag) ans++;
}
for(int i=0;i<n;i++){
if(i == n - 1) printf("%.2lf\n", c[i]);
else printf("%.2lf ", c[i]);
}
for(int i=0;i<m;i++){
if(i == m - 1) printf("%.2lf\n", b[i]);
else printf("%.2lf ", b[i]);
}
printf("%d\n\n", ans);
}
return 0;
}
2024.C语言合法标识符
#include<stdio.h>
#include<math.h>
#include<string.h>
int main(){
// 当前main.cpp目录下读取in,txt中的输入
// freopen("in.txt","r",stdin);
int n;
while(~scanf("%d", &n)){
// 吃掉输入的回车
getchar();
char s[105];
for(int k=0;k<n;k++){
gets(s);
int len = strlen(s);
int flag = 0;
if((s[0]<='z' && s[0]>='a') || (s[0]<='Z' && s[0]>='A') || s[0] == '_'){
flag = 1;
for(int i=1;i<len;i++){
if((s[i]<='z' && s[i]>='a') || (s[i]<='Z' && s[i]>='A') || s[i] == '_' || (s[i]<='9' && s[i]>='0') ) ;
else flag = 0;
}
}
if(flag) printf("yes\n");
else printf("no\n");
}
}
return 0;
}
2025.查找最大元素
#include<stdio.h>
#include<math.h>
#include<string.h>
int main(){
int n;
char s[1005], maxx;
while(~scanf("%s", s)){
maxx = 'a';
int len = strlen(s);
for(int i=0;i<len;i++){
if((s[i] - 'a') > (maxx - 'a')) maxx = s[i];
}
for(int i=0;i<len;i++){
if(s[i] == maxx) printf("%c(max)",s[i]);
else printf("%c",s[i]);
}
printf("\n");
}
return 0;
}
2026.首字母变大写
#include<stdio.h>
#include<math.h>
#include<string.h>
int main(){
// 当前main.cpp目录下读取in,txt中的输入
// freopen("in.txt","r",stdin);
char s[105];
while(gets(s)){
int len = strlen(s);
s[0] = s[0] + ('A' - 'a');
for(int i=1;i<len;i++){
if((s[i] <= 'z' && s[i] >= 'a') && s[i - 1] == ' ') s[i] = s[i] + ('A' - 'a');
}
puts(s);
}
return 0;
}
2027.统计元音
#include<stdio.h>
#include<math.h>
#include<string.h>
int main(){
// 当前main.cpp目录下读取in,txt中的输入
// freopen("in.txt","r",stdin);
int n;
char s[105];
int a[6];
char t[6] = {'a', 'e', 'i', 'o', 'u'};
while(~scanf("%d", &n)){
getchar();
for(int k=0;k<n;k++){
memset(a, 0, sizeof(a));
gets(s);
int len = strlen(s);
for(int i=0;i<len;i++){
for(int j=0;j<5;j++){
if(s[i] == t[j]) a[j]++;
}
}
for(int i=0;i<5;i++){
printf("%c:%d\n", t[i], a[i]);
}
if(k != n - 1) printf("\n");
}
}
return 0;
}
2028.Lowest Common Multiple Plus
#include<stdio.h>
#include<math.h>
#include<string.h>
typedef long long ll;
ll gcd(ll a,ll b){
return b == 0 ? a : gcd(b,a%b);
}
ll lcm(ll a,ll b){
return a*b/gcd(a,b);
}
int main(){
// 当前main.cpp目录下读取in,txt中的输入
// freopen("in.txt","r",stdin);
ll n, ans, x;
while(~scanf("%lld", &n)){
scanf("%lld", &ans);
for(int i=0;i<n-1;i++){
scanf("%lld", &x);
ans = lcm(ans, x);
}
printf("%lld\n", ans);
}
return 0;
}
2029.Palindromes _easy version
#include<stdio.h>
#include<math.h>
#include<string.h>
int main(){
// 当前main.cpp目录下读取in,txt中的输入
// freopen("in.txt","r",stdin);
int n;
while(~scanf("%d", &n)){
char s[105];
for(int k=0;k<n;k++){
scanf("%s", s);
int len = strlen(s), flag = 1;
for(int i=0,j=len-1;i<j;i++,j--){
if(s[i] == s[j]) continue;
else{
flag = 0;
break;
}
}
if(flag) printf("yes\n");
else printf("no\n");
}
}
return 0;
}