• 精工书院2022级-C语言编程机考模拟练习课堂


    精工书院2022级-C语言编程机考模拟练习课堂

    好吧虽然我说不写,但最后还是写了
    可怜可怜孩子,点个赞吧,往年这种文章可都是收费的(手动滑稽)

    机考模拟01】输出字符图形

    编写程序,从键盘输入一个n和字符,然后用输入的字符,输出相应图形。例如:

         输入:5,#<回车>
    
         输出:
    
        #####<回车>
    
       #####<回车>
    
      #####<回车>
    
     #####<回车>
    
    #####<回车>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    #include 
    
    int main()
    {
    	int n;
    	char x;
    	scanf("%d,%c",&n,&x);
    	for(int i = 0; i < n; i ++)
    	{
    		for(int j = 1; j < n - i; j ++) printf(" ");
    		for(int j = 0; j < n; j ++) putchar(x);
    		printf("\n");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    机考模拟02】偶数分解

    素数是指一个只能被1和它本身整除的数。

    编写程序,从键盘输入一个偶数,将它分解为两个素数之和。

    1. 列出所有的分解方式,每种方式占一行;
    2. 较小的素数放在前面。 例如:

    输入
    22<回车>
    输出
    22=3+19<回车>

    22=5+17<回车>

    22=11+11<回车>

    #include 
    
    int isp(int n)
    {
    	if(n%6==1||n%6==5) 
    	{
    		for(int i = 4;i < n;i ++)
    		{
    			if(n%i==0) return 0;
    		}
    		return 1;
    	}
    	else if(n == 2||n == 3) return 1;
    	else return 0;
    }
    
    int main()
    {
    	int n,a;
    	scanf("%d",&n);
    	for(a = 2;a <= n/2 ;a ++)
    	{
    		if(isp(a)&&isp(n-a))
    			printf("%d=%d+%d\n",n,a,n-a);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    如果是面对更大的数据或者多组询问,可以先预处理出全部素数(范围内)

    机考模拟03】组成最大数

    编写程序,从键盘任意输入一个自然数(不超过2030位),然后输出由该自然数的各位数字组成的最大数。
    例如,输入 2018 ,则输出 8210 。

    计数排序即可,之前讲过【字符】组成最大数

    #include 
    int num[10],x;
    int main(){
    	while((x = getchar())!='\n') num[x - '0'] ++;
    	for(int i = 9;i >= 0;i --) while(num[i]--) printf("%d",i);
    	printf("\n");
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    机考模拟04】计算日期差

    编写程序,从键盘输入两个日期,然后输出两个日期相差的天数。第二个日期比第一个日期大时,结果为正;否则为负。

    两个日期的输入格式均为: YYYY-MM-DD 。有效日期:1000-01-01 至 2080-12-31 。

     输入:2018-01-01,2018-02-02<回车>
    
     输出:32<回车>
    
    • 1
    • 2
    • 3

    也讲过【日期】计算天数

    #include 
    int a[15] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    int day(int y, int m, int d) 
    {
        
        if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) a[2] = 29;
        else a[2] = 28;
        int i, s;
        for (i = 1; i <= m - 1; i++) { d += a[i]; }
        s = 365 * (y - 1) + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400 + d;
        return s;
    }
    main() 
    {
        int y1, y2, m1, m2, d1, d2;
        scanf("%d-%d-%d,%d-%d-%d", &y1, &m1, &d1, &y2, &m2, &d2);
        printf("%d\n", day(y2, m2, d2) - day(y1, m1, d1));
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    机考模拟05】打印数字菱形

    输入 n 的值,输出如下例( n=4 )所示的数字菱形。

    
      4
     434
     43234
    4321234
     43234
     434
      4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    输入:
    n

    输出:
    数字菱形

    #include 
    using namespace std;
    int main()
    {
    	int num;
    	scanf("%d",&num);
    	for(int i = num - 1;i + num > 0;i--)
    	{
    		for(int j = 0;j < abs(i);j++) printf("  ");
    		for(int j = num - 1 - abs(i);j >= abs(i) + 1 - num;j--) printf("%-2d",abs(i) + 1 + abs(j));
    		printf("\n");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    机考模拟06】计算后续日期

    我们经常要计算,从今天往后N天之后是哪一天(哪年哪月哪日)。现在我们就可以编写一个程序,推算指定日期之后的第N天是什么日期。

    输入:
    年 月 日
    N

    输出:
    (年月日+N天后的)年.月.日
    只能说一模一样【日期】计算后续日期

    机考模拟07】寻找阿姆斯特朗数

    请编写一个程序寻找一种特殊整数:一个 n 位的正整数等于其各位数字的n次方之和。

    例如:407=4×4×4+0×0×0+7×7×7。所以407就是一个特殊数。

    输入:
    正整数的位数n(n<=6)。

    输出:
    所有此n位特殊数。每个数占一行。若不存在符合条件的特殊数,则输出提示:“No output.”;若存在,则从小到大进行输出。

    说明:
    假设输入为4,在4位整数中,有3个4位的特殊数,则输出格式为(输出中的1111、2222和9999并不是4位特殊数,只是格式样例):

    1111
    2222
    9999

    again,一模一样【中学】寻找阿姆斯特朗数

    机考模拟08】汉字字库存储多少

    汉字的点阵字库有1616,2424,36*36等各种粒度不一的编码方式,数字越大,表示点阵越精细,汉字形体越细致。

    根据汉字点阵的编码方式,计算若干个汉字需要的存储空间。

    输入:m n

    m代表汉字字形码的点阵位数(即m*m) n代表汉字个数

    输出:占据的Byte数

    输入:
    
    16      1(含义为,16*16的汉字点阵编码,1个汉字)
    
    输出:
    
    32(含义为Byte数)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    纯计算题

    #include   
    main()  
    {  
        int m,n;  
        scanf("%d%d",&m,&n);  
        printf("%d\n",m*m*n/8);  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    机考模拟09】合并字符串

    输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到 大排列。

    输入:
    两个已经排好顺序(升序)的两个字符串

    输出:
    一个合并在一起的有序(升序)的字符串

    要求:
    设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。
    如果采用先进行串连接,然后再进行排序的算法,则效率太低了。
    归并排序,老演员了【字符】合并字符串

    机考模拟10】求最大公约数——递归

    辗转相除法,一样【约数】求最大公约数——递归

  • 相关阅读:
    初学者必读书籍——两个月速成Python
    Redis 连接不上 WRONGPASS invalid username-password pair
    leetcode:476. 数字的补数
    android的rtmp直播推流(一) nginx服务器的搭建
    E. Qpwoeirut and Vertices(思维 + MST + lca + 线段树)
    源码剖析:Elasticsearch 段合并调度及优化手段
    深入浅出Docker:Java开发者的快速上手指南
    网络编程三要素
    【无标题】
    高级指针和引用,对于参数传递和赋值目标指针的意义
  • 原文地址:https://blog.csdn.net/CharlesHsuu/article/details/128210191