首页 > 技术文章 > 杭电oj平台上的11页题目代码:hdu-page11 (2020~2029)

BlueBlue-Sky 2018-03-14 20:32 原文

//2020
//思路:自己编写排序函数,用二重循环,将绝对值比较大的放到前面,具体实现就是将当前元素和后面的全部元素,选出后面最大的元素,将其放到前面
#include<stdio.h>
#include<string.h>
#include<math.h>
#define N 101
int num[N];

void my_sort(int a[], int n)
{
int i, j;
int temp;
for ( i = 0; i < n; i++)
{
for (j = i; j < n; j++)
{
//把绝对值大的数调到前面
if (abs(a[j])>abs(a[i]))
{
temp = a[i ];
a[i] = a[j];
a[j] = temp;
}
}
}
}

int main()
{
int n;
int i;
while (~scanf("%d",&n))
{
if (n == 0)
break;
for (i = 0; i < n; i++)
{
scanf("%d", &num[i]);
}
my_sort(num,n);
for (i = 0; i < n; i++)
{
if (i != 0)
printf(" ");
printf("%d", num[i]);
}
printf("\n");
}
return 0;
}

 

//2021
//思路:是为了给每位老师发工资的时候都不用老师找零钱,显然花大面额的才能使得准备的人民币张数最少
#include<iostream>
#define N 100
int salary[N];
using namespace std;
int main()
{
int n;
int i,j;
int ans;
int bill[6] = {100,50,10,5,2,1};
while (cin>>n)
{
ans = 0;
if (n==0)
{
break;
}
for ( i = 0; i < n; i++)
{
cin >> salary[i];
for ( j = 0; j < 6; j++)
{
ans += salary[i] / bill[j]; salary[i] %= bill[j];
}
}
cout << ans << endl;
}
return 0;
}

 

//2022
//思路:用结构体表示一个人的信息,(坐标和分数),然后找出绝对值分数最高的人输出其信息
#include<iostream>
#include<math.h>
#define N 100
typedef struct person
{
int x;//行号
int y;//列号
int s;//分数
}person;
person p[N];

using namespace std;
int main()
{
int m, n;
int i, j;
int count;
person max_p;//用来记录分数绝对值的人(结构体包括位置和分数)
person temp_p;
while (cin>>m>>n)
{
count = 0;
max_p.s = 0;
for (i = 1; i <= m; i++)
{
for ( j = 1; j <= n; j++)
{
cin >> p[count].s;
p[count].x = i;
p[count].y = j;
if (abs(max_p.s)<abs(p[count].s))
{
max_p.s = p[count].s;
max_p.x = p[count].x;
max_p.y = p[count].y;
}
count++;
}
}
cout << max_p.x << ' ' << max_p.y << ' ' << max_p.s << endl;
}
return 0;
}

 

//2023
//思路:用二维数组,行号代表哪个人,列号指的是成绩
#include<stdio.h>
#define N 51
#define M 6
int num[N][M];
double average_total_score[N];
double average_object_score[M];
int main()
{
int n, m;
int i, j;
double average1, average2;
int sum;
int count1;//用来统计各科成绩大于等于平均成绩的学生数量
int count2;
while (~scanf("%d%d",&n,&m))
{
count1 = 0;
count2 = 0;
for ( i = 1; i <= n; i++)
{
sum = 0;//用来记录第i个学生的总成绩
average1 = 0;//用来记录第i个学生的平均成绩
for ( j = 1; j <= m; j++)
{
scanf("%d", &num[i][j]);
sum += num[i][j];
}
average1 = sum*1.0 / m;
average_total_score[i] = 0;
if (i!=1)
{
printf(" ");
}
printf("%.2lf", average1);
}
printf("\n");
sum = 0;
for ( j = 1; j <=m; j++)
{
average2 = 0;
sum = 0;
for ( i = 1; i <= n; i++)
{
sum += num[i][j];
}
average2 = 1.0*sum / n;//记录各科成绩
average_object_score[j] = average2;
if (j!=1)
{
printf(" ");
}
printf("%.2lf", average2);
}
printf("\n");
for ( i = 1; i <= n; i++)
{
count2 = 0;
for ( j = 1; j <= m; j++)
{
if (num[i][j]>=average_object_score[j])
{
count2++;
}
}
if (count2==m)//说明第i个人的各科成绩都大于相应的科目成绩
{
count1++;//这第i个人要加到各科成绩均大于等于平均成绩的学生数量中
}
}
printf("%d\n\n",count1);
}
return 0;
}

 

//2024
//注意点:scanf不能接受空格、制表符Tab、回车等;而gets能够接受空格、制表符Tab和回车等;
#include<stdio.h>
#include<string.h>
#define N 100
char str[N];
int main()
{
int n;
scanf("%d", &n);
getchar();
int len;
int i;
int count;//用来记录合法字符的个数
while (n--)
{
len = 0;
gets(str);
len = strlen(str);
count=0;
if (str[0]>='0'&&str[0]<='9')
{
printf("no\n");

}
else
{
for ( i = 0; i < len; i++)
{
if (str[i] == '_' || (str[i] >= 'a'&&str[i] <= 'z') || (str[i] >= 'A'&&str[i] <= 'Z') || (str[i] >= '0'&&str[i] <= '9'))
{
count++;
}
}
if (count==len)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
}

return 0;
}

 

//2025
#include<stdio.h>
#include<string.h>
#define N 1000
char str[N];
int pos[N];//该数组用来记录插入max的位置
int main()
{
int i;
int len;//用来记录pos数组的长度
char max;
while (gets(str))
{
max = '\0';
len = 0;
len = strlen(str);
for ( i = 0; i < len; i++)
{
if (max<str[i])//找到最大的字母
{
max = str[i];
}
}
for ( i = 0; i < strlen(str); i++)
{
printf("%c", str[i]);
if (str[i]==max)
{
printf("(max)");
}
}
printf("\n");
//getchar();加了getchar()就wa了,删掉就对了
}
return 0;
}

 

//2026
#include<stdio.h>
#include<string.h>
#define N 101
char str[N];
int isAlphabet(char a)
{
if ((a>='A'&&a<='Z')||(a>='a'&&a<='z'))
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int len;
int i;
while (gets(str))
{
len = strlen(str);
//加这个的原因是下面的循环没有包括对str[0]的判断处理,故要加上
if (str[0]!=' ')
{
str[0] = str[0] - 32;
}
for ( i = 1; i < strlen(str); i++)
{
if (str[i-1]==' '&&isAlphabet(str[i]))
{
str[i] = str[i] - 32;
}
}
puts(str);
}
return 0;
}

 

//2027
#include<stdio.h>
#include<string.h>
#define N 101
char str[N];
int count[6];//用来记录各种元音字母的个数
int main()
{
int n;
int i,j;
int len;
scanf("%d", &n);
getchar();
for ( i = 0; i < n ; i++)
{
gets(str);
memset(count, 0, sizeof(count));
len = strlen(str);
for ( j = 0; j < len ; j++)
{
switch (str[j])
{
case 'a':count[0]++; break;
case'e':count[1]++; break;
case'i':count[2]++; break;
case'o':count[3]++; break;
case'u':count[4]++; break;
default:
break;
}
}
if (i!=0)
{
printf("\n");
}
printf("a:%d\n", count[0]);
printf("e:%d\n", count[1]);
printf("i:%d\n", count[2]);
printf("o:%d\n", count[3]);
printf("u:%d\n", count[4]);
}
return 0;

}

 

//2028
#include<stdio.h>
#include<string.h>
#define N 101

int gcd(int a, int b)
{
int temp;
//比较大小的然后交换的这个步骤,好像没有关系,因为有还是没有都是ac了
/*if (a<b)
{
temp = a;
a = b;
b = temp;
}*/
if (b==0)
{
return a;
}
return gcd(b, a%b);
}

int lcm(int a, int b)
{
// return a / gcd(a, b)* b;a*b会超出int的范围
return a / gcd(a, b)* b ;
}
int main()
{
int a, b;
int n;
int i, j;
int ans;
int c;
while (~scanf("%d",&n))
{
ans = 1;
for (i = 0; i < n; i++)
{
scanf("%d", &c);
ans = lcm(ans, c);
}
printf("%d\n", ans);

}
return 0;
}

 

//2029
#include<stdio.h>
#include<string.h>
#define N 101
char str[N];
int main()
{
int n;
scanf("%d", &n);
int len;
int i;
while (n--)
{
scanf("%s", str);
len = strlen(str);
//循环的时候,将字符第一个数和倒数第一个数比较
for ( i = 0; i < len/2; i++)
{
if (str[i]!=str[len-1-i])
{
break;
}
}
if (i >= len/2)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
return 0;
}

推荐阅读