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

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

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

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

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

     输入:5,#<回车>

     输出:

    #####<回车>

   #####<回车>

  #####<回车>

 #####<回车>

#####<回车>
#include <stdio.h>

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");
	}
}

机考模拟02】偶数分解

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

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

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

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

22=5+17<回车>

22=11+11<回车>

#include <stdio.h>

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);
	}
}

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

机考模拟03】组成最大数

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

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

#include <stdio.h>
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;
}

机考模拟04】计算日期差

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

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

 输入:2018-01-01,2018-02-02<回车>

 输出:32<回车>

也讲过【日期】计算天数

#include <stdio.h>
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));
}

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

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


  4
 434
 43234
4321234
 43234
 434
  4

输入:
n

输出:
数字菱形

#include <bits/stdc++.h>
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");
	}
}

机考模拟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数)

纯计算题

#include <stdio.h>  
main()  
{  
    int m,n;  
    scanf("%d%d",&m,&n);  
    printf("%d\n",m*m*n/8);  
}

机考模拟09】合并字符串

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

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

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

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

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

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

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值