函数值计算
试题名称 1-2 函数值计算
问题描述
输入一个x值,计算以下三个函数的y值。当10>x≥0时,求出三个函数值的最大值;当x≥10时,输出三个函数值的和;当x<0时,求出三个函数导数值的最小值。
y1 = 2x+9 导数:
y2=7(1+x)^2 +9x 导数:
y3 = 7x^3/22-8 导数:
输入说明
输入一个实数x(-100≤x≤100)。
输入说明
当10>x≥0时,求出三个函数值的最大值;当x≥10时,输出三个函数值的和;当x<0时,求出三个函数导数值的最小值,小数点后保留2位小数。
测试样例:
输入样例1
10
输出样例1
1276.18
输入样例2
0
输出样例2
9.00
输入样例3
-2
输出样例3
-5.00
#include <stdio.h>
int main(){
float n,sum = 0;
float a[3],b[3];
int i;
scanf("%f",&n);
a[0] = 2*n+9;
a[1]=7*(1+n)*(1+n)+9*n;
a[2] = ((7*n*n*n)/22)-8;
if(n>=0&&n<=10){
float max = a[0];
for(i=1;i<3;i++){
if(max<a[i]) max = a[i];
}
printf("%.2f",max);
}else if(n>10){
for(i=0;i<3;i++){
sum = sum+a[i];
}
printf("%.2f",sum);
}else {
b[0] = 2;
b[1]= 14*(1+n)+9;
b[2]=21*n*n/22;
float min = a[0];
for(i=1;i<3;i++){
if(min>b[i]) min = b[i];
}
printf("%.2f",min);
}
return 0;
}
平方排序
试题名称 3-2 平方排序
问题描述
对于n个整数,将它们按照其平方数数值从大到小的顺序输出,如果两数字的平方数相等,则原本数字值更大的先输出。
如给定n=4个整数-3043,则其平方数分别为90169,又因为3>-3,所以最终输出为43-30。
输入说明
输入分两行:
第一行为一个正整数n,0<n<100;
第二行为n个整数,每个整数绝对值都小于215,整数之间以空格分隔.
输出说明
输出n行,为按照要求排序后的n个整数,每输出一个数字就换行。
测试样例:
输入样例1
4
-3043
输出样例1
4
3
-3
0
输入样例2
6
-512-8-45
输出样例2
-8
5
-5
-4
2
1
#include <stdio.h>
int main(){
int n,j;
scanf("%d",&n);
int a[100],i = 0;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<n-1;i++){
for(j=i;j<n;j++){
if(a[i]*a[i]<a[j]*a[j]){
int t;
t = a[i];
a[i] = a[j];
a[j] = t;
}else if(a[i]*a[i]==a[j]*a[j]){
if(a[i]<a[j]){
int t;
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
}
for(i=0;i<n;i++){
printf("%d\n",a[i]);
}
return 0;;
}
奇偶求和
试题名称 2-2奇偶求和
问题描述
有一个整数数列a,已知当0<n≤10000时,具有如下通项表达式:
an = 3(n-1)^2+2(n-1)+1
输入一个正整数m,试编程计算该数列中大于100的前m个偶数之和sum_even、前m-1个奇数之和sum_odd。
输入说明
输入一个正整数m(0<m≤20)。
输出说明
输出数列a中大于100的前m个偶数之和sum_even以及数列中大于100的前m-1个奇数之和sum_odd,两个整数之间用空格分隔。
测试样例:
输入样例1
1
输出样例1
162 0
输入样例2
5
输出样例2
2050 1108
输入样例3
13
输出样例3
16770 12540
#include <stdio.h>
int main(){
int n,i = 0,m;
int a[150];
scanf("%d",&n);
for(i=0;i<150;i++){
a[i]= 3*(i-1)*(i-1)+2*(i-1)+1;
}
int sum_even = 0,sum_odd=0;
for(i=7,m=1;m<=n;i++){
if(a[i]%2==0) {
m++;
sum_even = sum_even+a[i];
} }
for(i=7,m=1;m<n;i++){
if(a[i]%2==1) {
m++;
sum_odd = sum_odd+a[i];
} }
printf("%d %d",sum_even,sum_odd);
return 0;
}
求矩阵的值
4-2求矩阵的值
问题描述
给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求求出全部局部极大值及其所在的位置。
输入说明
第一行中给出矩阵A的行数M和列数N(3≤M,N≤50);随后M行,每行给出A在该行的N个元素的值。数字间以空格分隔。
输出说明
按照“元素值 行号 列号”的格式输出。按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。各元素的行、列编号均从1开始。
测试样例:
输入样例1
4 5
1 1 1 1 1
1 3 9 3 1
1 5 3 5 1
1 1 0 1 1
输出样例1
9 2 3
5 3 2
5 3 4
输入样例2
3 5
2 7 7 4-1
9 3 11 1 12
9 5 3 5 1
输出样例2
None 3 5
#include <stdio.h>
int main(){
int m,n;
scanf("%d %d",&m,&n);
int i = 0,j = 0;
int a[55][55];
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
int flag = 0;
for(i=1;i<m-1;i++){
for(j=1;j<n-1;j++){
if(a[i][j]>a[i-1][j]&&a[i][j]>a[i+1][j]&&a[i][j]>a[i][j-1]&&a[i][j]>a[i][j+1]){
printf("%d %d %d\n",a[i][j],i+1,j+1);
flag = 1;
}
}
}
if(flag ==0) printf("None %d %d",m,n);
return 0;
}
选优秀员工
试题名称 5-2选优秀员工
问题描述
某公司前期选出了N个候选的优秀员工,每位候选者包含员工号(正整数)、业绩([0,100]区间内的整数)和得票数([0,1000]区间内的整数)等信息。
下面需要从这N个候选人中确定最终的优秀员工,规则如下:当候选的优秀员工数不足4人时,得票数最高者为优秀员工;否则,得票数排候选员工前25%(向下取整,即小数部分丢弃)者为优秀员工。
编写程序输出优秀员工的人数,以及所有优秀员工的工号及其得票数。
输入格式:
输入的第一行为一个正整数N(0<N≤20),表示优秀员工候选人数。随后N行,每行给出一位员工的业绩信息和得票信息,格式为“工号业绩票数”,中间以空格分隔。题目保证所有候选员工的得票数互不相同。
输出格式:
第一行输出最终的优秀员工人数;
第二行起每行输出一名优秀员工的工号和得票数,间隔一个空格。按照得票数降序排列。
测试样例:
输入样例1:
3
10001 78 835
10002 92 786
10003 56 455
输出样例1:
1
10001 835
输入样例2:
6
10001 78 835
10002 92 786
10003 56 855
10004 76 455
10005 66 755
10006 80 800
输出样例2:
1
10003 855
#include <stdio.h>
struct employ{
int num;
int sale;
int tick;
}em[100];
int main(){
int n;
scanf("%d",&n);
int i = 0,j=0;
for(i=0;i<n;i++){
scanf("%d %d %d",&em[i].num,&em[i].sale,&em[i].tick);
}
struct employ temp;
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(em[i].tick<em[j].tick){
temp = em[i];
em[i] = em[j];
em[j] = temp;
}
}
}
if(n<4){
printf("1\n%d %d",em[0].num,em[0].tick);
} else if(n>=4){
printf("%d\n",n/4);
for(i=0;i<n/4;i++){
printf("%d %d\n",em[i].num ,em[i].tick);
}
}
return 0;
}
码字不易,给个👍~我们下一篇博客见!
才疏学浅,个人理解难免有错,欢迎指正。