本题目标是设计一个函数,用于确定整型数组内的最大数值。
int FindArrayMax( int a[], int n );
参数说明:
a 表示由调用者传入的整数数组;n 是该数组中实际包含的元素数量。函数应返回数组
a 中的最大值。
测试程序框架如下:
#include <stdio.h>
#define MAXN 10
int FindArrayMax( int a[], int n );
int main()
{
int i, n;
int a[MAXN];
scanf("%d", &n);
for( i=0; i<n; i++ ){
scanf("%d", &a[i]);
}
printf("%d\n", FindArrayMax(a, n));
return 0;
}
/* 请在这里填写答案 */
输入示例:
4
20 78 99 -14
输出示例:
99
参考实现方案:
int FindArrayMax( int a[], int n ){
int max = a[0];
for(int i = 1; i < n; i++){
max = max > a[i] ? max : a[i];
}
return max;
}
要求完成一个函数,能够从给定的 n 个自定义类型 Element 的数据中找出最大值。
ElementType Max( ElementType S[], int N );
其中,数组
S[] 存放所有待比较的元素,正整数 N 表示元素总数。函数需返回这些元素中的最大值,且结果仍为 ElementType 类型。
裁判端测试代码样例:
#include <stdio.h>
#define MAXN 10
typedef float ElementType;
ElementType Max( ElementType S[], int N );
int main ()
{
ElementType S[MAXN];
int N, i;
scanf("%d", &N);
for ( i=0; i<N; i++ )
scanf("%f", &S[i]);
printf("%.2f\n", Max(S, N));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
3
12.3 34 -5
输出样例:
34.00
参考解答:
ElementType Max( ElementType S[], int N ){
ElementType max = S[0];
for(int i = 1; i < N; i++){
max = max > S[i] ? max : S[i];
}
return max;
}
题目描述:给定两个整数 A 和 B,依次输出从 A 到 B(含)之间的所有整数,并统计它们的总和。
输入格式:
一行内输入两个整数 A 和 B,满足 ?100 ≤ A ≤ B ≤ 100,以空格分隔。
输出格式:
按顺序输出 A 到 B 的每个整数,每行最多显示5个数字,每个数字占5个字符宽度,右对齐。最后单独一行以
Sum = X 的形式输出总和 X。
输入示例:
-3 8
输出示例:
-3 -2 -1 0 1
2 3 4 5 6
7 8
Sum = 30
参考解法:
#include <stdio.h>
int main (void) {
int A, B, sum = 0, count = 0;
scanf("%d %d", &A, &B);
for(int i = A; i <= B; i++){
printf("%5d", i);
sum += i;
if(++count % 5 == 0){
printf("\n");
}
}
if(count % 5 != 0){
printf("\n");
}
printf("Sum = %d", sum);
return 0;
}
任务是对给定的正整数 N,计算 S = 1! + 2! + 3! + … + N! 的值。
输入格式:
输入一个不超过10的正整数 N。
输出格式:
输出 S 的最终结果。
输入样例:
3
输出样例:
9
参考答案:
#include <stdio.h>
int function(int n){
int out = 1;
for(int i = 1; i <= n; i++){
out *= i;
}
return out;
}
int main (void) {
int N, sum = 0;
scanf("%d", &N);
for(int i = 1; i <= N; i++){
sum += function(i);
}
printf("%d", sum);
return 0;
}
给定正整数 n,编写程序求表达式 (1 + 2 + … + n) + (1 + 2 + … + n) 的值。
输入格式:
输入一个正整数 n(n ≤ 100)。
输出格式:
输出所求表达式的计算结果。
输入示例:
5
输出示例:
340
参考实现:
#include <stdio.h>
int main (void) {
int n, sum = 0;
scanf("%d", &n);
for(int i = 1; i <= n*n; i++){
if(i <= n){
sum += i;
}
sum += i;
}
printf("%d", sum);
return 0;
}
根据某城市普通出租车计费规则,编写程序计算乘客应付金额。具体规则如下:
输入格式:
在一行中输入行驶里程(单位:公里,保留一位小数)和等待时间(单位:分钟,整数),两者以空格分隔。
输出格式:
输出应支付的总车费(单位:元),结果四舍五入至整数。
输入样例1:
2.6 2
输出样例1:
10
输入样例2:
5.1 4
输出样例2:
14
输入样例3:
12.5 9
输出样例3:
34
参考解答:
#include <stdio.h>
int main (void) {
double distance, time, money = 0;
scanf("%lf %lf", &distance, &time);
if(distance <= 3){
money = 10;
}else if(distance <= 10){
money = 10 + (distance - 3) * 2;
}else{
money = 10 + (10 - 3) * 2 + (distance - 10) * 3;
}
money += (int)time / 5 * 2;
printf("%.0lf", money);
return 0;
}
设定个人所得税计算公式为:税率 × (工资 ? 1600),请根据以下分级税率表编程计算应缴税额:
输入格式:
输入非负实数表示工资金额。
输出格式:
输出应缴纳的税款,精确到小数点后两位。
输入示例1:
1600
输出示例1:
0.00
输入示例2:
1601
输出示例2:
0.05
输入示例3:
3000
输出示例3:
140.00
输入示例4:
4000
输出示例4:
360.00
输入示例5:
5000
输出示例5:
680.00
参考代码:
#include <stdio.h>
int main (void) {
double money, ans = 0;
scanf("%lf", &money);
if(money <= 1600){
ans = 0;
}else if(money <= 2500){
ans = (money - 1600) * 0.05;
}else if(money <= 3500){
ans = (money - 1600) * 0.1;
}else if(money <= 4500){
ans = (money - 1600) * 0.15;
}else{
ans = (money - 1600) * 0.2;
}
printf("%.2lf", ans);
return 0;
}
中国有句俗语“三天打鱼两天晒网”。假设某人从第一天开始遵循此规律,即连续三天打鱼,接着两天晒网,循环往复。现给出第 N 天,判断这一天他是处于“打鱼”还是“晒网”状态。
输入格式:
输入一个不超过1000的正整数 N。
输出格式:
输出当天的状态:“Fishing” 或 “Drying”,并附加显示 “in day N”。
输入样例1:
103
输出样例1:
Fishing in day 103
输入样例2:
34
输出样例2:
Drying in day 34
参考实现:
#include <stdio.h>
int main (void) {
int n;
scanf("%d", &n);
int flag = n % 5;
if(flag <= 3 && flag != 0){
printf("Fishing in day %d", n);
}else{
printf("Drying in day %d", n);
}
return 0;
}R7-10 谷歌的招聘
分数:15
出题人:陈越
所属单位:浙江大学
2004年7月,谷歌公司在硅谷101公路旁设置了一块大型广告牌,用于人才招募。广告内容极为简洁——仅包含一个以.com结尾的网址,而该网址前缀是一个10位素数,此数为自然常数e中首次出现的连续10位数字。成功识别该素数者,可通过访问对应网站进入后续招聘环节。
自然常数e是一个著名的超越数,其前若干位如下所示:
e = 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921...
其中粗体部分即为所求答案。
本题要求解决一个更普遍的情况:给定一个长度为L的数字串,找出其中最早出现的由K位连续数字组成的素数。
输入格式:
首行输入两个正整数L和K,其中L表示数字串长度(不超过1000),K表示需查找的连续位数(小于10)。
第二行为一个长度为L的正整数N。
输出格式:
输出N中最早出现的K位连续数字构成的素数。若不存在符合条件的素数,则输出:
404
注意:原始数字中的前导零也计入位数。例如,在“200236”中查找4位素数时,“0023”是合法结果;但不能将第一个‘2’视为“0002”输出,因为原数中并不存在该数字之前的三个前导零。
输入样例1:
20 5
23654987725541023819
输出样例1:
49877
输入样例2:
10 3
2468001680
输出样例2:
404
参考答案:
#include <stdio.h>
int IsPrime(int n){
if(n < 2){
return 0;
}else{
for(int i = 2; i*i <= n; i++){
if(n % i == 0){
return 0;
}
}
return 1;
}
}
int main (void) {
int L, K;
scanf("%d %d", &L, &K);
getchar();
char str[1005];
gets(str);
int len = strlen(str);
for(int i = 0; i <= len - K; i++){
int number = 0;
for(int j = i; j < i+K; j++){
number = number * 10 + (str[j] - '0');
}
if(IsPrime(number)){
for (int j = i; j < i + K; j++) {
printf("%c", str[j]);
}
return 0;
}
}
printf("404");
return 0;
}
R7-7 超速判断
分数:20
出题人:杨起帆
所属单位:浙大城市学院
模拟交通警察使用的雷达测速设备。当输入车辆行驶速度后,若超过60 mph,则显示“Speeding”,否则显示“OK”。
输入格式:
一行内给出一个不超过500的非负整数,代表雷达检测到的车速。
输出格式:
在一行中输出测速仪的显示结果,格式如下:
Speed: V - S
其中
V
表示实际车速,
S
或
Speeding
或
OK
为对应状态标识。
输入样例1:
40
输出样例1:
Speed: 40 - OK
输入样例2:
75
输出样例2:
Speed: 75 - Speeding
参考答案:
#include <stdio.h>
int main (void) {
int speed;
scanf("%d", &speed);
if(speed <= 60){
printf("Speed: %d - OK", speed);
}else{
printf("Speed: %d - Speeding", speed);
}
return 0;
}
R7-8 求n以内最大的k个素数以及它们的和
分数:15
出题人:林颖贤
所属单位:集美大学
本题要求计算并输出不超过n的最大k个素数,并统计其总和。
输入格式:
在一行中输入两个数值n(范围为10 ≤ n ≤ 10000)与k(范围为1 ≤ k ≤ 10)。
输出格式:
按以下格式在同一行输出结果:
素数1+素数2+…+素数k=总和值
素数需按照从大到小顺序排列。若n范围内素数数量不足k个,则按实际数量输出。
输入样例1:
1000 10
输出样例1:
997+991+983+977+971+967+953+947+941+937=9664
输入样例2:
12 6
输出样例2:
11+7+5+3+2=28
参考答案:
#include <stdio.h>
int IsPrime(int n){
if(n < 2){
return 0;
}else{
for(int i = 2; i*i <= n; i++){
if(n % i == 0){
return 0;
}
}
return 1;
}
}
int main (void) {
int n, k, sum = 0, flag = 1;
scanf("%d %d", &n, &k);
for(int i = n; k > 0 && i >= 2; i--){
if(IsPrime(i)){
if(!flag){
printf("+");
}
printf("%d", i);
sum += i;
k--;
flag = 0;
}
}
printf("=%d", sum);
return 0;
}
R7-9 小于m的最大的10个素数
分数:15
出题人:王淑琴
所属单位:天津师范大学
给定一个整数m(满足50 < m < 20000),找出小于m的最大的10个素数。
输入格式:
一行输入一个满足条件的正整数m。
输出格式:
在一行中按递减顺序输出这10个素数,每个素数占6列宽度。不得添加任何额外字符或格式。
输入样例:
229
输出样例:
227 223 211 199 197 193 191 181 179 173
参考答案:
#include <stdio.h>
int IsPrime(int n){
if(n < 2){
return 0;
}else{
for(int i = 2; i*i <= n; i++){
if(n % i == 0){
return 0;
}
}
return 1;
}
}
int main (void) {
int m, count = 0;
scanf("%d", &m);
for(int i = m-1; count < 10; i--){
if(IsPrime(i)){
printf("%6d", i);
count++;
}
}
return 0;
}
34
Drying in day 34
#include <stdio.h>
int main (void) {
int n;
scanf("%d", &n);
int flag = n % 5;
if(flag <= 3 && flag != 0){
printf("Fishing in day %d", n);
}else{
printf("Drying in day %d", n);
}
return 0;
}
扫码加好友,拉您进群



收藏
