IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言 期末合集 pta -> 正文阅读

[C++知识库]C语言 期末合集 pta

6-1 求最大的偶数和最小的奇数的差

分数?10

全屏浏览题目

切换布局

作者?王跃萍

单位?东北石油大学

求10个数中的最大的偶数和最小的奇数的差。

函数接口定义:

 

int fun(int a[],int n);

函数fun中an是用户传入的参数,函数fun的功能是求a数组中的n个数中的最大的偶数和最小的奇数的差,并返回此差值。

裁判测试程序样例:

 

#include<stdio.h> int fun(int a[],int n); int main() {int b[10],i,max,k=0; for(i=0;i<10;i++) scanf("%d",&b[i]); printf("%d\n",fun(b,10)); return 0; } /* 请在这里填写答案 */

输入样例:

1 2 3 4 5 6 7 8 9 10

输出样例:

9
#include<stdio.h> 
int fun(int a[],int n){
     int max=0,max1=0;
     
     for(int i=0;i<10;i++){
         if(a[i]%2==0){
             if(max<a[i])
                 max=a[i];
     }
     else{
         max1=a[0];
         if(max1>a[i])
            max1=a[i];
   }
 }
    if(max<max1)
             return max1-max;
         else
             return max-max1;

}

?

6-2 字符串中的字符用插入法排序

分数?10

全屏浏览题目

切换布局

作者?王跃萍

单位?东北石油大学

fun函数的功能是:利用插入法对字符串中的字符按从小到大的顺序进行排序。

函数接口定义:

 

void fun(char aa[]);

其中?aa?是用户传入的参数。 函数利用插入法对字符串中的字符按从小到大的顺序进行排序。

裁判测试程序样例:

 

#include <stdio.h> #define N 80 void fun(char aa[]); int main() { char a[N]; int i; gets(a); fun(a); printf("The string after sorting: %s\n",a); return 0; } /* 请在这里填写答案 */

输入样例:

asdcfv

输出样例:

The string after sorting:  acdfsv

?

 

6-3 日期几何

分数?10

全屏浏览题目

切换布局

作者?Happyer

单位?湖北文理学院

关于日期的结构定义如下:
struct DateG{ int yy,mm,dd;};

编写两个函数,一个计算自公元1年1月1日到指定的日期共经历了多少天。另一个是前一个函数的逆函数:由自公元1年1月1日历经指定的天数后的日期(返回年月日构成的日期)。

函数接口定义:

 

struct DateG days2Date(int x);{//from:{1,1,1} + 100-->{1,4,11} int Days(DateG x);// {2,,4,11} return 465 from{1,1,1}

裁判测试程序样例:

 

struct DateG{ int yy,mm,dd; }; char leapYear(int year);//闰年否 struct DateG _DateG(char *st);{//"1919-9-9"-->{1919,9,9} struct DateG Add(struct DateG x,int y);//{1919,9,9}+50-->{1919,10,29} char* Date2string(struct DateG x);//{1919,9,9}-->"1919-09-09" //以上为测试程序提供的测试用函数,略去不表, //以下两函数是必须自己完成的函数 struct DateG days2Date(int x);{//from:{1,1,1} + 100-->{1,4,11} int Days(struct DateG x);// {2,,4,11} return 465 from{1,1,1} int main(){ char st[12];scanf("%s",st); struct DateG d1=_DateG(st), d2=Add(d1,60*365); printf("%s\n",Date2string(d2)); d2=Add(d2,-1000); printf("%s\n",Date2string(d2)); d2=_DateG("2020-1-23"); printf("%.2f\n",(Days(d2)-Days(d1))/365.0); return 0; } /* 请在这里填写答案 */

输入样例:

输入用-号分隔的出生年月日,系统确保测试数据的合法性

2001-1-1

输出样例:

共三行输出。分别是:60年(按365天计一年精确计算的)后的退休日期;退休前倒计时1000天的日期;武汉抗疫封城时(2020-1-23)的年龄(按每365天为一岁,保留2位小数)。

[2060-12-17]
[2058-03-23]
19.07
struct DateG days2Date(int x) {
    struct DateG QWQ;
    QWQ.yy = 1;
    QWQ.mm = 1;
    QWQ.dd = 1;
    while (x--) {
        QWQ.dd++;
        if ((QWQ.yy % 4 == 0 && QWQ.yy % 100 != 0) || QWQ.yy % 400 == 0) {//是闰年   
            if ((QWQ.mm == 1 || QWQ.mm == 3 || QWQ.mm == 5 || QWQ.mm == 7 || QWQ.mm == 8 || QWQ.mm == 10 || QWQ.mm == 12) && QWQ.dd > 31)
            {
                QWQ.dd = 1;
                QWQ.mm++;
                if (QWQ.mm > 12) {
                    QWQ.mm = 1;
                    QWQ.yy++;
                }
            }
            else if (QWQ.mm == 2 && QWQ.dd > 29) {//闰年二月单独讨论   
                QWQ.dd = 1;
                QWQ.mm++;
            }
            else if ((QWQ.mm == 4 || QWQ.mm == 6 || QWQ.mm == 9 || QWQ.mm == 11) && QWQ.dd > 30) {
                QWQ.dd = 1;
                QWQ.mm++;
            }
        }
        else {//非闰年   
            if ((QWQ.mm == 1 || QWQ.mm == 3 || QWQ.mm == 5 || QWQ.mm == 7 || QWQ.mm == 8 || QWQ.mm == 10 || QWQ.mm == 12) && QWQ.dd > 31)
            {
                QWQ.dd = 1;
                QWQ.mm++;
                if (QWQ.mm > 12) {
                    QWQ.mm = 1;
                    QWQ.yy++;
                }
            }
            else if (QWQ.mm == 2 && QWQ.dd > 28) {//二月单独讨论   
                QWQ.dd = 1;
                QWQ.mm++;
            }
            else if ((QWQ.mm == 2 || QWQ.mm == 4 || QWQ.mm == 6 || QWQ.mm == 9 || QWQ.mm == 11) && QWQ.dd > 30) {
                QWQ.dd = 1;
                QWQ.mm++;
            }
        }
    }
    return QWQ;
}
 
int Days(struct DateG x) {
    int res = 0, flag = 1;
    while (flag == 1) {
        res++;
        x.dd--;
        if ((x.yy % 4 == 0 && x.yy % 100 != 0) || x.yy % 400 == 0) {//闰年  
            if ((x.mm == 1 || x.mm == 3 || x.mm == 5 || x.mm == 7 || x.mm == 8 || x.mm == 10 || x.mm == 12) && x.dd == 0) {
                if (x.mm == 8 || x.mm == 1)
                    x.dd = 31;
                else if (x.mm == 3)
                    x.dd = 29;
                else
                    x.dd = 30;
                x.mm--;
                if (x.mm == 0) {
                    x.mm = 12;
                    x.yy--;
                }
            }
            else if ((x.mm == 2 || x.mm == 4 || x.mm == 6 || x.mm == 9 || x.mm == 11) && x.dd == 0) {
                x.dd = 31;
                x.mm--;
            }
        }
        else {//非闰年  
            if ((x.mm == 1 || x.mm == 3 || x.mm == 5 || x.mm == 7 || x.mm == 8 || x.mm == 10 || x.mm == 12) && x.dd == 0) {
                if (x.mm == 8 || x.mm == 1)
                    x.dd = 31;
                else if (x.mm == 3)
                    x.dd = 28;
                else
                    x.dd = 30;
                x.mm--;
                if (x.mm == 0) {
                    x.mm = 12;
                    x.yy--;
                }
            }
            else if ((x.mm == 2 || x.mm == 4 || x.mm == 6 || x.mm == 9 || x.mm == 11) && x.dd == 0) {
                x.dd = 31;
                x.mm--;
            }
        }
 
        if (x.yy == 1 && x.mm == 1 && x.dd == 1)
            flag = 0;
    }
    return res;
}

?

6-4 在被调函数中计算任意日期的星期值

分数?10

全屏浏览题目

切换布局

作者?巨同升

单位?山东理工大学

以下程序的功能是:首先在main函数中输入任意一个日期的年、月、日的值,然后在被调函数weekday中求出该日期是星期几。要求写出函数weekday。
假定从公元第一天开始,就实施格里高利历法。格里高利历法的置闰规则是400年97闰,也可以概括为:四闰百不闰,四百闰。

函数接口定义:

 

void weekday(int y,int m,int d);

其中y、m、d是由主调函数传入的参数。

裁判测试程序样例:

 

#include <stdio.h> void weekday(int y,int m,int d); int main(void) {int y,m,d; scanf("%d%d%d",&y,&m,&d); weekday(y,m,d); return 0; } /* 请在这里填写答案 */

输入样例:

2012 3 25

输出样例:

星期日
 

?

6-5 月纳税额计算

分数?15

全屏浏览题目

切换布局

作者?唐艳琴

单位?中国人民解放军陆军工程大学

本题目要求读入每月工资,计算按月需要累计缴纳的税额(税率见下图),此处只需显示应缴纳的税额,无需减去已缴纳部分。结果保留两位小数。 注意:每月有5000元免税额。


上图为按年累计应纳税所得额

函数接口定义:

 

double m_tax(double salary,int month);

其中salary和?month?是用户传入的参数,函数返回每月累计应纳税额。

裁判测试程序样例:

 

#include<stdio.h> double m_tax(double salary,int month); int main() { double money,tax; int i; for(i=1;i<=12;i++) { scanf("%lf",&money); tax=m_tax(money,i); printf("the sum of %d months tax is %.2f\n",i,tax); } return 0; } /* 请在这里填写答案 */

输入样例:

1000
2000
10000
5000
8000
500
2000
15000
1000
5000
6000
9000

输出样例:

?

在这里给出相应的输出。例如:

the sum of 1 months tax is 0.00
the sum of 2 months tax is 0.00
the sum of 3 months tax is 0.00
the sum of 4 months tax is 0.00
the sum of 5 months tax is 30.00
the sum of 6 months tax is 0.00
the sum of 7 months tax is 0.00
the sum of 8 months tax is 105.00
the sum of 9 months tax is 0.00
the sum of 10 months tax is 0.00
the sum of 11 months tax is 15.00
the sum of 12 months tax is 135.00

注意 :3月虽然工资为10000元,但3个月累计免税额为15000元,因此无需纳税。5月时累计免税额为25000元,累计工资收入为26000元,因此应纳税额为1000元,按税率为30元,后面同理所得。

?

 

6-6 求自定类型元素序列的中位数

分数?25

全屏浏览题目

切换布局

作者?陈越

单位?浙江大学

本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第?(N+1)/2?大的元素。其中集合元素的类型为自定义的ElementType

函数接口定义:

 

ElementType Median( ElementType A[], int N );

其中给定集合元素存放在数组A[]中,正整数N是数组元素个数。该函数须返回NA[]元素的中位数,其值也必须是ElementType类型。

裁判测试程序样例:

 

#include <stdio.h> #define MAXN 10 typedef float ElementType; ElementType Median( ElementType A[], int N ); int main () { ElementType A[MAXN]; int N, i; scanf("%d", &N); for ( i=0; i<N; i++ ) scanf("%f", &A[i]); printf("%.2f\n", Median(A, N)); return 0; } /* 你的代码将被嵌在这里 */

输入样例:

3
12.3 34 -5

输出样例:

12.30

?

ElementType Median( ElementType A[], int N ){
	//先排序,希尔排序
	int d, i , j, k;
	ElementType temp;
	for(d = N/2; d >= 1; d/=2){
		for(i=d;i < N; i++){
			for(j=i-d;j>=0&&A[j]>A[j+d];j-=d){
			       temp = A[j];
	               A[j] = A[j+d];
				   A[j+d] = temp;  
			}
		}
	}
	return A[N/2];
}

6-7 计算A[n]=1/(1 + A[n-1])?

分数?10

全屏浏览题目

切换布局

作者?王跃萍

单位?东北石油大学

函数 fun 的功能是:根据整型形参 n,计算某一数据项的值。
A[1]=1, A[2]=1/(1 + A[1]), A[3]=1/(1 + A[2]), …,A[n]=1/(1 + A[n-1])
例如,若 n=10,则应输出:A10=0.617977。

函数接口定义:

 

float fun(int n);

其中n是用户传入的参数,函数须返回第n项的值。

裁判测试程序样例:

 

#include <stdio.h> float fun(int n); int main( ) { int n ; scanf("%d", &n ) ; printf("A%d=%f\n", n, fun(n) ) ; return 0; } /* 请在这里填写答案 */

输入样例:

10

输出样例:

A10=0.6180
float fun(int n){
  if(n==1)
      return 1;
    else
        return 1/(1+fun(n-1));
}

?

6-8 π/2≈1+1/3+1/3*2/5+...

分数?10

全屏浏览题目

切换布局

作者?王跃萍

单位?东北石油大学

函数fun的功能是:根据以下公式求π值,并作为函数值返回。例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.140578。

函数接口定义:

 

double fun(double eps);

其中eps是用户传入的精度,函数须返回π值。

裁判测试程序样例:

 

#include<stdio.h> double fun(double eps); int main() { double x; scanf("%lf",&x); printf("Pi=%lf\n",fun(x)); return 0; } /* 请在这里填写答案 */

输入样例:

0.0005

输出样例:

Pi=3.140578

?

double fun(double eps){
   float pi=1,t=1,k=3;
    int i;
      for(i=1;i<1000;i++)
       {
       	t*=i/k;
       	pi=pi+t;
       	k=k+2;
       	if(t<0.00002)break;
       	}
        return 2*pi;
}

6-9 求二维数组每行的和

分数?10

全屏浏览题目

切换布局

作者?王跃萍

单位?东北石油大学

求一个二维数组每行的和。输出二维数组时,将每行的和输出在该行的右边。

函数接口定义:

 

void fun(int a[3][3],int b[3]);

函数fun中?ab都是用户传入的参数,函数fun的功能是将a数组中每行元素的和放在b数组中。

裁判测试程序样例:

 

#include "stdio.h" void fun(int a[3][3],int b[3]); int main() {int a[3][3]={1,2,3,9,8,4,6,2,1},i,j,b[3]; fun(a,b); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%4d",a[i][j]); printf("%4d\n",b[i]); } return 0; } /* 请在这里填写答案 */

输出样例:

   1   2   3   6
   9   8   4  21
   6   2   1   9
void fun(int a[3][3],int b[3]){
    for(int i=0;i<3;i++){
        int sum=0;
        for(int j=0;j<3;j++){
            sum+=a[i][j];
            
            b[i]=sum;
        }
    }
}

?

6-10 主对角线的平方,左下三角的乘2

分数?10

全屏浏览题目

切换布局

作者?王跃萍

单位?东北石油大学

将一个二维数组作如下处理后输出。将主对角线上的元素变为其平方,左下三角的元素变成自身乘2,然后输出左下三角的元素(包括主对角线元素)。

函数接口定义:

 

void fun(int a[3][3]);

函数fun中?a是用户传入的参数,函数fun的功能将主对角线上的元素变为其平方,左下三角的元素变成自身乘2。

裁判测试程序样例:

 

#include<stdio.h> void fun(int a[3][3]); int main() {int i,j,a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%5d",a[i][j]); printf("\n"); } fun(a); for(i=0;i<3;i++) { for(j=0;j<=i;j++) printf("%5d",a[i][j]); printf("\n"); } return 0; } /* 请在这里填写答案 */

输出样例:

    1    2    3
    4    5    6
    7    8    9
    1
    8   25
   14   16   81
void fun(int a[3][3]){
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            if(i==0&&j==0 || i==1&&j==1 || i==2&&j==2 )
                a[i][j]=a[i][j]*a[i][j];
                else
                a[i][j]=a[i][j]*2;
        }
    }
}

?

6-11 字符串中的字符逆序存放

分数?10

全屏浏览题目

切换布局

作者?王跃萍

单位?东北石油大学

将一个字符串中的字符逆序存放。如字符串为“abcde",则逆序存放后应为"edcba"。

函数接口定义:

 

void fun(char s[])

s?是用户传入的参数。 函数将字符串s中的字符逆序存放。

裁判测试程序样例:

 

#include<stdio.h> void fun(char s[]); int main() {char s[80]; gets(s); fun(s); puts(s); return 0; } /* 请在这里填写答案 */

输入样例:

abcde

输出样例:

edcba
#include<string.h> 
void fun(char s[]){
    char ss[strlen(s)];
     for(int i=0;i<strlen(s);i++){
         ss[i]=s[i];
     }
    int ii=0;
    for(int i=strlen(s)-1;i>=0;i--){
         s[ii]=ss[i];
        ii++;
        
     }
     
 }

?

6-12 字符串比较

分数?10

全屏浏览题目

切换布局

作者?王跃萍

单位?东北石油大学

函数fun的功能是比较两个字符串,如果s1=s2,则返回值0;如果s1>s2,则返回值1;如果s1<s2,则返回-1。

函数接口定义:

 

int fun(char a[],char b[]);

其中ab是用户传入的参数。 函数比较两个字符串,如果a=b,则返回值0;如果a>b,则返回值1;如果a<b,则返回-1。

裁判测试程序样例:

 

#include "stdio.h" #include "string.h" int fun(char a[],char b[]); int main() {int t; char s1[40],s2[40]; gets(s1); gets(s2); t=fun(s1,s2); printf("%d\n",t); return 0; } /* 请在这里填写答案 */

输入样例:

asd
fg

输出样例:

-1
#include<string.h>
int fun(char a[],char b[]){
    int lena=strlen(a);
    int lenb=strlen(b);
for(int i=0;i<lena;i++){
	if(b[i]==0x00)//a字符串要长一些
		return 1;
	if(a[i]==b[i])
		continue;
	else if(a[i]>b[i])
		return 1;
	else
		return -1;
}
return 0;
}

?

6-13 交换最大值和最小值的位置

分数?10

全屏浏览题目

切换布局

作者?王跃萍

单位?东北石油大学

请编写函数fun,交换一个数组中最大值和最小值的位置,其他元素的位置不变。要求在主函数中输入一组数,然后在调用fun函数后,输出处理后的数据。。

函数接口定义:

 

void fun(int a[]);

其中?a?是用户传入的参数。函数功能是交换数组?a中最大值和最小值的位置,其他元素的位置不变。

裁判测试程序样例:

 

#include <stdio.h> void fun(int a[]); int main() { int a[10],i; for(i=0;i<10;i++) scanf("%d",&a[i]); fun(a); for(i=0;i<10;i++) printf("%4d",a[i]); printf("\n"); return 0; } /* 请在这里填写答案 */

输入样例:

9 5 1 2 6 3 4 8 7 5

输出样例:

   1   5   9   2   6   3   4   8   7   5
void fun(int a[]){
  int min_pos=0;
int max_pos=0;
int max=a[0],min=a[0];
    for(int i=0;i<10;i++){
	    if(max<a[i]){
	  	    max_pos=i;
		    max=a[i];
	    }
		
	    if(min>a[i]){
		    min=a[i];
		    min_pos=i;
	    }
    }
	int tmp=a[min_pos];
	a[min_pos]=a[max_pos];
	a[max_pos]=tmp;


}

?

6-14 删去一维数组中所有相同的数

分数?10

全屏浏览题目

切换布局

作者?王跃萍

单位?东北石油大学

请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。

函数接口定义:

 

int fun(int a[M],int n);

其中?a?和?n?都是用户传入的参数。函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。

裁判测试程序样例:

 

#include <stdio.h> #define M 10 int fun(int a[M],int n); int main() { int a[M]={1,3,5,5,7,7,7,11,11,13},num; num=fun(a,M); printf("num=%d",num); return 0; } /* 请在这里填写答案 */

输出样例:

num=6
int fun(int a[M],int n){
int del_num=0;
int tmp=a[0];
for(int i=1;i<n;i++){
	if(a[i]==tmp){
		del_num=del_num+1;
	}
	else
		tmp=a[i];
	

}
    return n-del_num;
}

?

6-15 在一个升序排列的数组中插入一个数

分数?10

全屏浏览题目

切换布局

作者?王跃萍

单位?东北石油大学

编写函数fun,在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。

函数接口定义:

 

void fun(int a[N],int number);

其中?a?和?number?都是用户传入的参数。函数在一个已按升序排列的数组?a?中插入一个数?number?,插入后,数组元素仍按升序排列

裁判测试程序样例:

 

#include <stdio.h> #define N 11 void fun(int a[N],int number); int main() { int i,number,a[N]={1,2,4,6,8,9,12,15,149,156}; scanf("%d",&number); printf("The original array:\n"); for(i=0;i<N-1;i++) printf("%5d",a[i]); printf("\n"); fun(a,number); printf("The result array:\n"); for(i=0;i<N;i++) printf("%5d",a[i]); printf("\n"); return 0; } /* 请在这里填写答案 */

输入样例:

6

输出样例:

The original array:
    1    2    4    6    8    9   12   15  149  156
The result array:
    1    2    4    6    6    8    9   12   15  149  156
void fun(int a[N], int number)
{
    int m;

    for (int i = 0; i < N; i++)
    {
        if (a[i] >= number)
        {
            m = i;
            for (int q = (N-1); q > i; q--)
            {
                a[q] = a[q - 1];
            }
            break;
        }
    }

    a[m] = number;
}

?

6-16 求出二维数组的最大元素及其所在的坐标

分数?10

全屏浏览题目

切换布局

作者?王跃萍

单位?东北石油大学

编写一个函数fun,函数的功能是:求出N×M整型数组的最大元素及其所在的行坐标及列坐标(如果最大元素不唯一,选择位置在最前面的一个)。

函数接口定义:

 

int fun(int array[N][M]);

其中?a?是用户传入的参数。 函数须返回 N×M整型数组的最大元素,其所在的行坐标及列坐标放在全局变量Row和Col中。

裁判测试程序样例:

 

#include <stdio.h> #define N 4 #define M 3 int Row,Col; int fun(int array[N][M]); int main() { int a[N][M],i,j,max,row,col; for(i=0;i<N;i++) for(j=0;j<M;j++) scanf("%d",&a[i][j]); for(i=0;i<N;i++) { for(j=0;j<M;j++) printf("%5d",a[i][j]); printf("\n"); } max=fun(a); printf("max=%d,row=%d,col=%d",max,Row,Col); return 0; } /* 请在这里填写答案 */

输入样例:

5 8 4
4 5 11
1 2 3
7 4 1

输出样例:

    5    8    4
    4    5   11
    1    2    3
    7    4    1
max=11,row=1,col=2
int fun(int a[N][M]){
    int max=a[0][0];
    for(int i=0;i<4;i++){
        for(int j=0;j<3;j++){
            if(max<a[i][j])
            {
                max=a[i][j];
                Row=i;
                Col=j;
            }
            
        }
    }
    return max;
}

?

6-17 用函数实现从数列中删除一个数

分数?18

全屏浏览题目

切换布局

作者?yjs

单位?福州大学至诚学院

编写一个函数实现:删除n个元素的数列中下标为k的元素。

测试程序将输入一个下标值,调用本函数,删除数列{1,4,13,9,6,11,18,14,25}中该下标位置的元素,并输出删除后的数列。

函数接口定义:

 

void deleted ( int a[], int n, int k);

其中?a?、n和?k?都是用户传入的参数。?a是数列所在数组的首地址;?n?是数列元素个数,?k?是[0, 8]区间内的个位数。

裁判测试程序样例:

 

#include <stdio.h> void deleted ( int a[], int n, int k); int main() { int a[9]={1,4,13,9,6,11,18,14,25},k; int i; scanf("%d",&k); deleted(a,9,k); for(i=0;i<8;i++) printf("%4d", a[i]); return 0; } /*请将答案写在这里*/

输入样例:

输入一个[0,8]间的个位数

0

输出样例:

输出数组中各元素占4列

   4  13   9   6  11  18  14  25

?

void deleted ( int a[], int n, int k){
  for(int i=k;i<n;i++){
	a[i]=a[i+1];
    }
}

6-18 用函数实现插入数到数列指定位置

分数?18

全屏浏览题目

切换布局

作者?yjs

单位?福州大学至诚学院

编写一个函数实现:将一个数插入数列中指定下标的位置,并保持原有数列顺序不变。
测试程序将输入一个数x和下标k,并调用本函数将该数插入9个数的数列中下标为k的位置,并保持原有数列顺序不变,然后输出新的数列(10个数)。

函数接口定义:

 

在这里描述函数接口。例如: void insert ( int a[], int n, int x, int k);

其中?a?、n?、x?和?k?都是用户传入的参数。?a?是待查数列的数组首地址;?n?是数组元素个数;?x是带插入数的值;?k是带插入数的下标,将实现将x插入?n个数的数组?a?中下标为?k?的位置。

裁判测试程序样例:

 

#include <stdio.h> void insert ( int a[], int n, int x, int k); int main() { int a[10]={1,4,13,9,6,11,18,14,25},x,k; int i; scanf("%d%d",&x,&k); insert(a,9,x,k); for(i=0;i<10;i++) printf("%4d", a[i]); return 0; } /*请将答案写在这里*/

输入样例:

输入两个数,第1个数代表待插入的数值,第2个数应在[0,9]间代表待插入的位置下标

15 9

输出样例:

输出插入15后的数列

   1   4  13   9   6  11  18  14  25  15
void insert ( int a[], int n, int x, int k)
{
    
    if(k==n-1){
        a[k]=x;//判断k是否为最后一个
    }else {
       
        for(int i=n-1;i>=k;i--){
            a[i+1]=a[i];//数组元素右移一次
        }  
    }a[k]=x;
}

?

6-19 高效查单III

分数?10

全屏浏览题目

切换布局

作者?龚雄兴

单位?湖北文理学院

单位上班打卡,一般上班、下班及中间各打一次,每天每个人均应该打卡三次……。编写函数,高效地(使用尽量少的辅助空间,以尽量少的时间代价)找出指定长度的数组中只一次卡的元素(就是假设的少打卡的那一个)。数组元素为整数,可通过getDi()函数取得。

函数接口定义:

 

vooid fun(int n);

其中?n?是数组中元素的个数。函数须找出数组中单个出现的整数输出。

裁判测试程序样例:

 

#include <stdio.h> #include <stdlib.h> int getDi(int i);//return D[i] 用来访问数组元素的函数--测试程序提供 void Init(int n);//数据初始化函数--测试程序提供 void Fun(int n);//需要完成的函数 int main(){ int i,j=0,n;scanf("%d",&n);srand(n); Init(n); fun(n); return 0; }

输入样例:

10
97 61 97 61 41 97 77 41 41 61

输出样例:

程序输出那个单次出现的整数,并换行。

77

/* 请在这里填写答案 */

 

?

6-20 筛出字符串中的数字字符

分数?10

全屏浏览题目

切换布局

作者?王跃萍

单位?东北石油大学

编写函数:把一个字符串中的所有英文字母取出,生成一个新的字符串。

函数接口定义:

 

void fun(char s[]);

其中s是用户传入的参数。 函数fun的功能是把一个字符串s中的所有数字字符取出,并重新放回s中。

裁判测试程序样例:

 

#include <stdio.h> void fun(char s[]); int main() { char item[80]; gets(item); fun(item); printf("%s\n",item); return 0; } /* 请在这里填写答案 */

输入样例:

as12fg

输出样例:

12
#include<string.h>
void fun(char s[]){
    
    char a[10];
    int x=0;
    for(int i=0;i<strlen(s);i++){
        
        if(((int)s[i]>=48)&&((int)s[i]<=57)){
            a[x]=s[i];
            x++;
        }
     }
    
    for(int i=0;i<=strlen(s);i++)
            s[i]=0;
    
    for(int i=0;i<x;i++)
            s[i]=a[i];
    s[x]='\0';//字符串以\0判断是否为末尾 否则会继续输出
}

?

7-1 字符串排序

分数?20

全屏浏览题目

切换布局

作者?张泳

单位?浙大城市学院

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

输入格式:

输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。

输出格式:

按照以下格式输出排序后的结果:

After sorted:
每行一个字符串

输入样例:

red yellow blue black white

输出样例:

After sorted:
black
blue
red
white
yellow
#include<stdio.h>
#include<string.h>
int main()
{
	int i;
	char a[5][90];
	for(i=0;i<5;i++){
		scanf("%s",a[i]);
	}
	int l,j;
	for(l=0;l<5-1;l++){
		for(j=l+1;j<5;j++){
		if(strcmp(a[j],a[l])<=0){
			char t[90];
			strcpy(t,a[j]);
            strcpy(a[j],a[l]);
            strcpy(a[l],t);
		}  
           }             
	}
    printf("After sorted:\n");
           for(int k=0;k<5;k++){
               printf("%s\n",a[k]);
           }
	return 0;
}

?

7-2 验证手机号

分数?5

全屏浏览题目

切换布局

作者?贺细平

单位?湖南农业大学

某系统在新用户注册时必须输入手机号,为了提高系统效率,防止输错手机号,需要对手机号进行验证。
验证规则为:
(1)长度为11位
(2)由数字0~9组成
(3)必须是1开头
以上3个条件同时满足,则验证通过,否则为不通过。

输入格式:

在一行中一个字符串,长度不超过20个字符。

输出格式:

如果验证通过则输出yes,否则输出no。

输入样例:

13812345678

输出样例:

yes
#include<stdio.h>
#include<string.h>
int main(){
    
    char a[100];
    int x=0;
    gets(a);
    
    for(int i=0;i<11;i++){
        if((int)a[i]>=48&&(int)a[i]<=57)
            ;
        else
            x=1;
        }
    
        if(a[0]=='1'&&strlen(a)==11){
            if(x==0)
                printf("yes");
            else
                printf("no");
        }
        else 
            printf("no");
    
    return 0;
}

?

7-3 循环的极值

分数?20

全屏浏览题目

切换布局

作者?刘勇

单位?重庆巴蜀常春藤学校

对于一个给定的数列, 输出在这个数列里面排第二大的那个数。

输入格式:

第1行:一个整数n(2<=n<=100000),表示数列的长度
第2行:有n个不相等的整数。

输出格式:

一个整数, 表示在这个数列里面排第二大的那个数。

输入样例:

5
2 6 4 3 8

输出样例:

6
#include<stdio.h>
int main(){
    
    int n=0;
    int a[100];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    
    for(int i=0;i<n;i++){
        for(int j=0;j<n-i-1;j++){
            if(a[j]>a[j+1]){
                int tmp=a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
            }
        }
    }
        
        printf("%d",a[n-2]);
    
    return 0;
}

?

7-4 N个数求和

分数?20

全屏浏览题目

切换布局

作者?陈越

单位?浙江大学

本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

输入格式:

输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 ...给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

输出格式:

输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

输入样例1:

5
2/5 4/15 1/30 -2/60 8/3

输出样例1:

3 1/3

输入样例2:

2
4/3 2/3

输出样例2:

2

输入样例3:

3
1/3 -1/6 1/8

输出样例3:

7/24
#include <stdio.h>
int gcd(int m,int n);

int main(int argc, char** argv) {
    int N;
    scanf("%d", &N);
    int i,a[N],b[N];
    int x,y,c,d,m,n;//x为分子,y为分母
    //读取分数
    for (i = 0; i < N; i++) {
        scanf("%d/%d", &a[i], &b[i]);
    }
    //通分
    x = a[0];
    y = b[0];
    for (i = 1; i < N; i++) {
        x = x * b[i] + a[i] * y;//通分后分子大小
        y *= b[i];      //通分后分母大小
    
        c = gcd(x, y);	//最大公约数
        if(c!=0){
            x /= c;//化简后分子
            y /= c;//化简后分母
        }
    }
    if(x == 0 && y != 0){
        printf("0");
    }else{
        d = x/y;//求整数部分
        x %= y;//求分数部分
        
        if (d != 0 && x != 0) {
            printf("%d %d/%d", d, x, y);
        }
        else if (d != 0 && x == 0) {
            printf("%d", d);
        }
        else {
            printf("%d/%d",x, y);
        }
    }
    return 0;
}
    //求最大公约数
    int gcd(int m,int n)
    {
        while (n) {
            int t = n;
            m %= n;
            n = m;
            m = t;
        }
        return m;
    }

?

7-5 A-B

分数?20

全屏浏览题目

切换布局

作者?陈越

单位?浙江大学

本题要求你计算A?B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A?B。

输入格式:

输入在2行中先后给出字符串A和B。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。

输出格式:

在一行中打印出A?B的结果字符串。

输入样例:

I love GPLT!  It's a fun game!
aeiou

输出样例:

I lv GPLT!  It's  fn gm!
#include<stdio.h>
#include<string.h>
int main()
{
	int i=0,j=0;			//用于循环和数组下标
	char str1[10010];		//用来存储A、B两个字符串
	char str2[10010];		//用来存储要删除的字符串字母
	int length;				//用来存储字符串长度
	gets(str1);
	gets(str2);
	length = strlen(str2);	//这里只需要记住str2字符串的长度即可
	while(str1[i]!='\0')	//将str1字符串从第一个字母开始带进去一一查验
	{
		for(j=0;j<length;j++)//将这个字母放到str2中一一查询是否有对应的,若有对应的
		{					//那么for循环就会提前跳出,并且j的值不可能会等于length,
			if(str1[i]==str2[j])//记住关键词,提前!所以从这里就可以肯定若for循环执行
				break;			//到了最后,那么证明这个字母在str2中是找不到对应的,
		}						//那么自然需要显示啦!
		if(j==length)
			printf("%c",str1[i]);
		i++;
	}
	printf("\n");
	return 0;
}

?

7-6 Phone List

分数?10

全屏浏览题目

切换布局

作者?兰大飞马

单位?兰州大学

给定?n?个长度不超过?10?的数字串,问其中是否存在两个数字串?S,T,使得?S?是?T?的前缀,多组数据。

输入格式:

第一行一个整数?T,表示数据组数。
对于每组数据,第一行一个数?n,接下来?n?行输入?n?个数字串。
对于全部数据,1≤T≤40,1≤n≤104。

输出格式:

对于每组数据,若存在两个数字串?S,T,使得?S?是?T?的前缀,则输出 NO ,否则输出 YES 。
请注意此处结果与输出的对应关系!

输入样例:

2
3
911
97625999
91125426
5
113
12340
123440
12345
98346

输出样例:

NO
YES
 

?

7-7 英文单词排序

分数?25

全屏浏览题目

切换布局

作者?张泳

单位?浙大城市学院

本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。

输入格式:

输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。

输出格式:

输出为排序后的结果,每个单词后面都额外输出一个空格。

输入样例:

blue
red
yellow
green
purple
#

输出样例:

red blue green yellow purple 
#include<stdio.h>
#include<string.h>

int main(void)
{
  char str[20][11];
  int i=0;
  
  while (1)
  {
      scanf("%s",str[i]);
      if (str[i][0]=='#')
        break;
      i++;                //i同时也记录了有几个单词
  }

  int len=i;       //用len记录i,增加程序的可读性
  int j,k;
  char temp[11];
  
  for (j=0; j<=len-1; j++)     //对字符串进行冒泡排序
  {
    for (k=0; k<len-j; k++)
    {
        if (strlen(str[k-1])>strlen(str[k]))
        {
            strcpy(temp,str[k]);
            strcpy(str[k],str[k-1]);
            strcpy(str[k-1],temp);
        }
    }
  }

  for (j=0; j<=len-1; j++)
  {
      printf("%s ",str[j]);
  }
  return 0;
}

?

7-8 最长对称子串

分数?25

全屏浏览题目

切换布局

作者?陈越

单位?浙江大学

对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。

输入格式:

输入在一行中给出长度不超过1000的非空字符串。

输出格式:

在一行中输出最长对称子串的长度。

输入样例:

Is PAT&TAP symmetric?

输出样例:

11
#include <stdio.h>
#include <string.h>
int main() {
    char s[1001];     //注意申请空间大小,再就是没有重复的时候最长字符串个数为1
    gets(s);   //gets比较好用 scanf数组名遇到空格会断开
    int len = strlen(s),flag=0,temp=0;
    int maxsize = 0;//最长的对称字符个数
    for (int i = 0; i < len; i++) {
        temp = 1;
        for (int j = 1; j < len/2+1; j++) {
            if ((i - j < 0) || (i + j > len) || s[i - j] != s[i + j])//对称的字符串是奇数个时
                break;                                                  
            temp += 2;
        }
        maxsize = (temp > maxsize) ? temp : maxsize;
        temp = 0;                                              //对称的字符串是偶数个时
        for (int j = 0; j < len/2+1; j++) {
            if ((i - j - 1 < 0) || (i + j > len) || s[i - j - 1] != s[i + j])
                break;
            temp += 2; 
        }
        maxsize = (temp > maxsize) ? temp : maxsize;
    }
    printf("%d\n",maxsize);
    return 0;
}

?

7-9 统计一行文本的单词个数

分数?15

全屏浏览题目

切换布局

作者?张彤彧

单位?浙江大学

本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入格式:

输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let's go to room 209.

输出样例:

5
#include <stdio.h>

int main() {
    char a[1000];//初始化数组
    gets(a);//赋值
    int n,num=0,i;
    for (i=0;a[i] != '\0';i++);//获取数组个数
    n=i;
    for (i=0;i<n;i++){
        if (a[i] != ' ' && a[i+1] == ' ') num++;
        if (a[i] != ' ' && a[i+1] == '\0') num++;
    } 
    printf("%d\n",num);
    return 0;
}

?

7-10 稳赢

?

分数?15

全屏浏览题目

切换布局

作者?陈越

单位?浙江大学

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:

现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。

输入格式:

输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi代表“锤子”、JianDao代表“剪刀”、Bu代表“布”。End代表输入结束,这一行不要作为出招处理。

输出格式:

对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。

输入样例:

2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End

输出样例:

Bu
ChuiZi
Bu
ChuiZi
JianDao
ChuiZi
Bu
#include <stdio.h>
#include <string.h>
int main()
{
	int k, c;
	char s[10];
	scanf("%d", &k);
	c = k;//为初始化准备
	getchar();//细节取‘\n’
	while (gets(s) && s[0] != 'E')
	{
		if (k != 0)
		{
			switch (s[0])
			{
				case'C':printf("Bu\n"); break;
				case'J':printf("ChuiZi\n"); break;//对第一个字母判断就够了了
				case'B':printf("JianDao\n"); break;
			}
			k--;
		}
		else
		{
			printf("%s\n", s);
			k = c;//初始化迎来新开始
		}
	}
 
	return 0;
}

?

7-11 打印沙漏

分数?20

全屏浏览题目

切换布局

作者?陈越

单位?浙江大学

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

*****
 ***
  *
 ***
*****

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:

输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:

首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:

19 *

输出样例:

*****
 ***
  *
 ***
*****
2
#include <stdio.h>
 
int main(){
    int N, i, num = 0, surplus; // num:用到的个数  surplus:剩余个数
    char ch;
 
    scanf("%d %c", &N, &ch);
 
    for( i=1; num<N; i++ ){  // i:顶部到中间的层数
        if( i == 1 )
            num = 1;
        else
            num += 2 * (2*i-1);
    }
 
    if( num > N ){
        i -= 1;
        num -= 2 * (2*i-1);
        surplus = N - num;
    }
 
    for( int j=i-1; j>1; j-- ){    // 打印上班层
        for( int n=j; n<i-1; n++ )
            putchar(' ');
        for( int m=1; m<=2*j-1; m++ )
            printf("%c", ch);
        putchar('\n');
    }
    
    for( int j=i-1; j>1; j-- )    // 打印中间层
        putchar(' ');
    printf("%c\n", ch);
 
    for( int j=2; j<=i-1; j++ ){    // 打印下半层
        for( int n=j; n<i-1; n++ )
            putchar(' ');
        for( int m=1; m<=2*j-1; m++ )
            printf("%c", ch);
        putchar('\n');
    }
 
    printf("%d", surplus);
 
    return 0;
}

?

7-12 组合数的和

分数?15

全屏浏览题目

切换布局

作者?陈越

单位?浙江大学

给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。

输入格式:

输入在一行中先给出 N(1?<?N?<?10),随后一行给出 N 个不同的非 0 个位数字。数字间以空格分隔。

输出格式:

输出所有可能组合出来的2位数字的和。

输入样例:

3
2 8 5

输出样例:

330
#include <stdio.h>
int main()
{
    int a[10],n,i,j,sum=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(j!=i)
                sum+=a[i]*10+a[j];
        }
    }
    printf("%d",sum);
}

?

7-13 考试周

分数?5

全屏浏览题目

切换布局

作者?陈越

单位?浙江大学

考试周快到了,浙江大学的电子屏又调皮了…… 本题请你帮小编写一个自动倒计时的程序,对给定的日期(例如“腊八”就对应 8)和倒计时天数(例如电子屏上的“四天之后”就对应 4),自动调整公式里的分母(例如 8/2=4 里面的那个 2)。

输入格式:

输入在一行中给出两个正整数:A?是给定的日期,不超过 30;B?是倒计时天数,不超过 10。

输出格式:

在一行中输出公式?A/X=B,其中?X?是满足等式的数字,输出时保留小数点后 1 位即可。

输入样例:

8 3

输出样例:

8/2.7=3

?

#include<stdio.h>
int main()
{
    int A, B;
    double X;
    scanf("%d", &A);
    scanf("%d", &B);
    if (A < 0 || A>30)
        return 0;
    if (B < 0 || B>10)
        return 0;
    X = 1.0*A / B;
    printf("%d/%.1f=%d\n", A, X, B);
    return 0;
}

7-14 Cassels方程

分数?10

全屏浏览题目

切换布局

作者?陈越

单位?浙江大学

Cassels方程是一个在数论界产生了巨大影响的不定方程:x2+y2+z2=3xyz。该方程有无穷多自然数解。

本题并不是要你求解这个方程,只是判断给定的一组?(x,y,z)?是不是这个方程的解。

输入格式:

输入在第一行给出一个不超过 10 的正整数?N,随后?N?行,每行给出 3 个正整数?0<x≤y≤z≤1000。

输出格式:

对于每一组输入,如果是一组解,就在一行中输出?Yes,否则输出?No

输入样例:

2
1 1 1
5 6 7

输出样例:

Yes
No
#include<stdio.h>
int main()
{
    int length, x, y, z, i;
    scanf("%d", &length);

    if (length > 0)
    {
        for (i = 1; i <= length; i++)
        {
            scanf("%d %d %d", &x, &y, &z);
            if (x*x + y * y + z * z == 3 * x*y*z)
            {
                printf("Yes\n");
            }
            else
            {
                printf("No\n");
            }
        }

    }
    return 0;
}

?

7-15 字母串

分数?15

全屏浏览题目

切换布局

作者?陈越

单位?浙江大学

英语老师要求学生按照如下规则写一串字母:

  • 如果写了某个大写字母,下一个就必须写同个字母的小写,或者写字母表中下一个字母的大写;
  • 如果写了某个小写字母,下一个就必须写同个字母的大写,或者写字母表中前一个字母的小写;
  • 当然也可以什么都不写,就结束这个字母串。

例如?aAaABCDdcbBC?就是一个合法的字母串;而?dEFfeFGhI?就是非法的。注意?a?没有前一个字母,?Z?也没有下一个字母。

现在面对全班学生交上来的作业,老师请你写个程序自动批改。

输入格式:

输入在第一行给出一个不超过 100 的正整数 N。随后 N 行,每行给出一位学生的作业,即仅由英文字母组成的非空字母串,长度不超过?2×106。

输出格式:

对每位学生的作业,如果正确就在一行中输出?Y,否则输出?N

输入样例:

2
aAaABCDdcbBC
dEFfeFGhI

输出样例:

Y
N
 

?

7-16 调和平均

分数?10

全屏浏览题目

切换布局

作者?陈越

单位?浙江大学

N?个正数的算数平均是这些数的和除以?N,它们的调和平均是它们倒数的算数平均的倒数。本题就请你计算给定的一系列正数的调和平均值。

输入格式:

每个输入包含 1 个测试用例。每个测试用例第 1 行给出正整数?N?(≤1000);第 2 行给出?N?个正数,都在区间?[0.1,100]?内。

输出格式:

在一行中输出给定数列的调和平均值,输出小数点后2位。

输入样例:

8
10 15 12.7 0.3 4 13 1 15.6

输出样例:

1.61
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int a,i;
    float b,sum=0;
    scanf("%d",&a);
    for(i=1;i<=a;i++)
    {
        scanf("%f",&b);
        sum=sum+1/b;
    }
    sum=sum/a;
    sum=1/sum;
    printf("%.2f",sum);
    return 0;
}

?

7-17 西安距离

分数?10

全屏浏览题目

切换布局

作者?翁恺

单位?浙江大学

小明来到了古都西安,想去参观大唐西市!

西安的道路可以看做是与x轴或y轴垂直的直线,小明位于(a,b),而目的地位于(c,d),问最少几步可以到达。

输入格式:

一行中四个整数,a,b,c,d,表示坐标为(a,b)与(c,d),这里0<=a,b,c,d<=1000

输出格式:

输出这两个点的西安距离。

输入样例:

0 0 3 4

输出样例:

7
#include<stdio.h>
#include<math.h>
int main()
{
	int a,b,c,d;
	double s=0;
	scanf("%d %d %d %d",&a,&b,&c,&d);
	s=abs(d-b)+abs(c-a);
	printf("%.0f",s);
	return 0;
}

?

7-18 乘法口诀数列

分数?20

全屏浏览题目

切换布局

作者?陈越

单位?浙江大学

本题要求你从任意给定的两个 1 位数字?a1??和?a2??开始,用乘法口诀生成一个数列 {an?},规则为从?a1??开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。

输入格式:

输入在一行中给出 3 个整数,依次为?a1?、a2??和?n,满足?0≤a1?,a2?≤9,0<n≤103。

输出格式:

在一行中输出数列的前?n?项。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

2 3 10

输出样例:

2 3 6 1 8 6 8 4 8 4
#include<stdio.h>
#include<stdio.h>
#include<math.h>
int main()
{
int a[20000],n,c=2,t;
    for(int i=0;i<2;i++)
    {   scanf("%d",&a[i]);}
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        t=a[i]*a[i+1];
        if(t<10) a[c++]=t;
        else
        {
            a[c++]=t/10;
            a[c++]=t%10;
        }
    }
    for(int i=0;i<n;i++)
    {
printf("%d",a[i]);
        if(i!=n-1) printf(" ");
    }
    return 0;
}

?

7-19 谁能进图书馆

分数?10

全屏浏览题目

切换布局

作者?陈越

单位?浙江大学

为了保障安静的阅读环境,有些公共图书馆对儿童入馆做出了限制。例如“12 岁以下儿童禁止入馆,除非有 18 岁以上(包括 18 岁)的成人陪同”。现在有两位小/大朋友跑来问你,他们能不能进去?请你写个程序自动给他们一个回复。

输入格式:

输入在一行中给出 4 个整数:

禁入年龄线 陪同年龄线 询问者1的年龄 询问者2的年龄

这里的禁入年龄线是指严格小于该年龄的儿童禁止入馆;陪同年龄线是指大于等于该年龄的人士可以陪同儿童入馆。默认两个询问者的编号依次分别为?1?和?2;年龄和年龄线都是 [1, 200] 区间内的整数,并且保证?陪同年龄线?严格大于?禁入年龄线

输出格式:

在一行中输出对两位询问者的回答,如果可以进就输出?年龄-Y,否则输出?年龄-N,中间空 1 格,行首尾不得有多余空格。

在第二行根据两个询问者的情况输出一句话:

  • 如果两个人必须一起进,则输出?qing X zhao gu hao Y,其中?X?是陪同人的编号,?Y?是小孩子的编号;
  • 如果两个人都可以进但不是必须一起的,则输出?huan ying ru guan
  • 如果两个人都进不去,则输出?zhang da zai lai ba
  • 如果一个人能进一个不能,则输出?X: huan ying ru guan,其中?X?是可以入馆的那个人的编号。

输入样例 1:

12 18 18 8

输出样例 1:

18-Y 8-Y
qing 1 zhao gu hao 2

输入样例 2:

12 18 10 15

输出样例 2:

10-N 15-Y
2: huan ying ru guan
#include<stdio.h>
int main()
{
	int a,b,c,d;
	scanf("%d %d %d %d",&a,&b,&c,&d);
	if(c>=a&&d>=a)  //两个人的年龄都大于等于禁入年龄线 
	{
		printf("%d-Y %d-Y\n",c,d);
		printf("huan ying ru guan");
	}
	else if(c>=a&&d<a)  //第一个人大于等于禁入年龄线 第二人小于 
	{
		if(c>=b)   //第一个人大于等于陪同年龄线 
		{
			printf("%d-Y %d-Y\n",c,d);
			printf("qing 1 zhao gu hao 2");
		} 
		else    //第一个人小于陪同年龄线 
		{
			printf("%d-Y %d-N\n",c,d);
			printf("1: huan ying ru guan");
		} 
	}
	else if(d>=a&&c<a) //第二个人大于等于禁入年龄线 第一人小于 
	{
		if(d>=b)   //第二个人大于等于陪同年龄线 
		{
			printf("%d-Y %d-Y\n",c,d);
			printf("qing 2 zhao gu hao 1");
		} 
		else    //第二个人小于陪同年龄线 
		{
			printf("%d-N %d-Y\n",c,d);
			printf("2: huan ying ru guan");
		} 
	}
	else         //两个人都小于禁入年龄线 
	{
		printf("%d-N %d-N\n",c,d);
		printf("zhang da zai lai ba");
	} 
	return 0;
} 

?

7-20 试试手气

分数?15

全屏浏览题目

切换布局

作者?陈越

单位?浙江大学

我们知道一个骰子有 6 个面,分别刻了 1 到 6 个点。下面给你 6 个骰子的初始状态,即它们朝上一面的点数,让你一把抓起摇出另一套结果。假设你摇骰子的手段特别精妙,每次摇出的结果都满足以下两个条件:

  • 1、每个骰子摇出的点数都跟它之前任何一次出现的点数不同;
  • 2、在满足条件 1 的前提下,每次都能让每个骰子得到可能得到的最大点数。

那么你应该可以预知自己第?n?次(1≤n≤5)摇出的结果。

输入格式:

输入第一行给出 6 个骰子的初始点数,即 [1,6] 之间的整数,数字间以空格分隔;第二行给出摇的次数?n(1≤n≤5)。

输出格式:

在一行中顺序列出第?n?次摇出的每个骰子的点数。数字间必须以 1 个空格分隔,行首位不得有多余空格。

输入样例:

3 6 5 4 1 4
3

?

输出样例:

4 3 3 3 4 3

样例解释:

这 3 次摇出的结果依次为:

6 5 6 6 6 6
5 4 4 5 5 5
4 3 3 3 4 3
#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
	int a[7] = {0} ; //数组a装6个骰子的初始的点数
	int b[7];
	int n;
	for (int i = 0; i < 6; i++)
	{
		cin >> b[i];
		a[i] = b[i];

	}
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < 6; j++)
		{
			if (i == 0)//第一次摇骰子
			{
				if (b[j] != 6)
				{
					b[j] = 6;//如果初始值不是6,就赋值为6
				}
				else
				{
					b[j]--;//如果初始值是6,就在6的基础上-1
				}

			}
			else if (i != 0)//第一次结束以后
			{
				if (b[j] - 1 == a[j]) //摇出来的点数和初始的点数相同
				{
					b[j] = b[j] - 2;//就在第一次摇出来的点数的基础上再-1,相当于在初始值的基础上-2
				}
				else
				{
					b[j]--;//
				}
			}
		}
	}
	for (int i = 0; i < 6; i++)
	{
		if (i < 5)
		{
			cout << b[i] << " ";
		}

		else
		{
			cout << b[i] <<endl;
		}

	}
	return 0;
}

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 10:47:31  更:2022-12-25 10:49:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/19 22:59:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码