《综合编程课程设计》题目

7-1 后天

如果今天是星期三,后天就是星期五;如果今天是星期六,后天就是星期一。我们用数字1到7对应星期一到星期日。给定某一天,请你输出那天的“后天”是星期几。
输入格式:
输入第一行给出一个正整数D(1 ≤ D ≤ 7),代表星期里的某一天。
输出格式:
在一行中输出D天的后天是星期几。
输入样例:

3

输出样例:

5
#include<stdio.h>
int main(void)
{
    int m;
    int sum=0;
    scanf("%d",&m);
    sum = m + 2;
    if(sum > 7)
    {
        printf("%d",sum - 7);
    }else{
        printf("%d",sum);
    }
}

7-2 念数字

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:

0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu

输入格式:
输入在一行中给出一个整数,如:1234
提示:整数包括负数、零和正数。
输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如
yi er san si
输入样例:

-600

输出样例:

fu liu ling ling
#include <stdio.h>
#include <string.h>
int main() {
    char num[10][5] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
    char a[1005];

    scanf("%s", a);
    if( a[0] == '-' ) {
        printf("fu");
    }
    else {
        printf("%s", num[a[0] - '0']);  // 输出数字对应的拼音
    }
    for( int i = 1; i < strlen(a); i++ ) {
        printf(" %s", num[a[i] - '0']);  // 行末没有最后的空格
    }
    printf("\n");
    return 0;
}

7-3 个位数统计

请添加图片描述
输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。
输出格式:
对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。
输入样例:

100311

输出样例:

0:2
1:3
3:1
#include<stdio.h>
int main()
{   
    int count[10]={0};
    char a;
    while((a=getchar())!='\n')
    {
        count[a-'0']++;
    }
    for(int i=0;i<10;i++)
    {
        if(count[i]!=0)
        {
            printf("%d:%d\n",i,count[i]);
        }
    }
    return 0;
}

#include<stdio.h>
#include<string.h>
int main(void)
{
	char str[1001];
	int num[10]={0};
	gets(str);
	int len=strlen(str);
	for(int i=0;i<len;i++)
	{
		num[str[i]-'0']++;
	}
	for(int i=0;i<10;i++)
	{
		if(num[i]!=0)
		{
			printf("%d:%d\n",i,num[i]);
		}
	}
}

7-4 查验身份证

一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

输入格式:
输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

输出格式:
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。

输入样例1:

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

输出样例1:

12010X198901011234
110108196711301866
37070419881216001X

输入样例2:

2
320124198808240056
110108196711301862

输出样例2:

All passed
#include <stdio.h>
int main()
{
    int weight[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
    char M[] = "10X98765432";
    int n;
    scanf("%d", &n);
    char number[n][19];

	//身份证号的录入
    for (int i = 0; i < n; i++)
    {
        scanf("%s", number[i]);
    }
    int flag = 1;
    for (int i = 0; i < n; i++) //遍历所有身份证号
    {
        int sum = 0;
        //计算每个身份证号对应的权重
        for (int j = 0; j < 17; j++)
        {
            sum += (number[i][j] - '0') * weight[j];
        }
        int over = sum % 11;
        //判断并输出满足条件的身份证号内容
        if (M[over] != number[i][17])
        {
            flag = 0;
            printf("%s\n", number[i]);
        }
    }
    if (flag) //另一种条件的判定
    {
        printf("All passed\n");
    }
    return 0;
}

7-5 一帮一

“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。

输入格式:
输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。

输出格式:
每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。

输入样例:

8
0 Amy
1 Tom
1 Bill
0 Cindy
0 Maya
1 John
1 Jack
0 Linda

输出样例:

Amy Jack
Tom Linda
Bill Maya
Cindy John
#include <stdio.h>
#include <string.h>
#include <math.h>
int book[51];
int main()
{
    char c[51][9];
    int n;
    int s[51];
    scanf("%d", &n);
    int i, j;
    for(i = 0; i < n; i++)
    {
        scanf("%d %s", &s[i], c[i]);
    }
    for(i = 0; i < n; i ++)
    {
        for(j = n - 1; j > 0; j--)
        {
            if(book[i] == 0 && book[j] == 0 && s[i] != s[j])
            {
                book[i] = 1;
                book[j] = 1;
                printf("%s %s\n", c[i], c[j]);
            }
        }
    }
    return 0;
}

7-6 古风排版

中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。

输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

输出格式:
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。

输入样例:

4
This is a test case

输出样例:

asa T
st ih
e tsi
 ce s

1.思路
①根据输出样例我们可以先确定一个二维数组,同时在注意gets函数输入字符串之前,先用getchar()把我们scanf后的回车给获取掉,不然gets会遇到回车终止
②我们确定二维数组的行和列,行由我们输入,列我们就自己求,注意如果不能整除,要给列数+1
③从列开始输入我们的字符串,注意列从大到小(从右向左)遍历,行从小到大(从上向下)遍历,注意如果字符串结束时,我们给那个值赋值一个‘ ’,防止我们之后打印时不整齐的情况。(不用担心因为这个空格导致列数超出的情况,因为要打印的列数我们都是计算好的)

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
	char arr[100][100] = { 0 };
	char str[1005];
	int n = 0;//行数
	scanf("%d", &n);
	getchar();
	gets(str);
	int L = strlen(str) / n;//列数
	if (strlen(str) % n != 0)
	{
		L++;
	}
	int k = 0;
	for (int i = L-1; i >= 0; i--)
	{
		for (int j = 0; j < n; j++)
		{
			if (str[k] == '\0')
			{
				arr[j][i] = ' ';
			}
			else
			{
				arr[j][i] = str[k];
				k++;
			}
		}
	}
	for (int p=0;p<n; p++)
	{
		for (int q = 0; q < L; q++)
		{
			printf("%c", arr[p][q]);
		}
		printf("\n");
	}
	return 0;
}

#include<stdio.h>
#include<string.h>
int main()
{
    int n,i,j,k,t;
    char s[2000];
    scanf("%d ",&n);
    gets(s);
    t=strlen(s);
    k=t/n;  //k为行数
    if(t%n!=0)
    {
        k++;  //行数加1
        for(i=t;i<n*k;i++)
        {
            s[i]=' ';  //将结尾需要打印但是没有值的赋值为空格
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=n*k-n+i;j>=0;)
        {
            printf("%c",s[j]);
            j-=n;
        }
        printf("\n");
    }
}

7-7 阅览室

天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。

注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。

输入格式:
输入在第一行给出一个正整数N(≤10),随后给出N天的纪录。每天的纪录由若干次借阅操作组成,每次操作占一行,格式为:

书号([1, 1000]内的整数) 键值(S或E) 发生时间(hh:mm,其中hh是[0,23]内的整数,mm是[0, 59]内整数)

每一天的纪录保证按时间递增的顺序给出。

输出格式:
对每天的纪录,在一行中输出当天的读者借书次数和平均阅读时间(以分钟为单位的精确到个位的整数时间)。

输入样例:

3
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00

输出样例:

2 196
0 0
1 60
#include <stdio.h>
int main()
{ int num[1001],n,i,N,hour,minute,h[1001],m[1001],count[11];
  char flag; //输入字符 
  float time[11]; //每天借书总时间 
  scanf("%d",&N);
 
  for(i=1;i<=N;i++)
  { for(int k=1;k<=1001;k++) //初始每天默认书都存在 
        num[k]=1;
    time[i]=0; //新的一天重置 
    count[i]=0; //借书次数 
	while(1)
    { scanf("%d %c%d:%d",&n,&flag,&hour,&minute);
      if(n==0) break;
	  if(flag=='S')  //两人借同一本书按后面的人算 
	 { num[n]=0;
	   h[n]=hour;
	   m[n]=minute;
	 }
	 if(flag=='E'&&num[n]==0)   //归还时算时间及借阅次数 
	 { num[n]=1;
	   if(minute>m[n]) //分钟数大于之前的  
	    time[i]+=(minute-m[n])+(hour-h[n])*60;//如3:10 4:30  
	    else
	    time[i]+=(minute+60-m[n])+(hour-h[n]-1)*60;//如 1:30 3:20   
	  count[i]++; //每还书一次证明完成一次借阅   次数+1 
	 } 
	}
  }
  for(i=1;i<=N;i++)
    {	if(count[i])  //如果借阅次数非0 
    	printf("%d %d\n",count[i],(int)(time[i]/(count[i])+0.5));
    	else
    	printf("%d %d\n",count[i],(int)time[i]);
	}
 return 0;
}

7-8 电子汪

据说汪星人的智商能达到人类 4 岁儿童的水平,更有些聪明汪会做加法计算。比如你在地上放两堆小球,分别有 1 只球和 2 只球,聪明汪就会用“汪!汪!汪!”表示 1 加 2 的结果是 3。

本题要求你为电子宠物汪做一个模拟程序,根据电子眼识别出的两堆小球的个数,计算出和,并且用汪星人的叫声给出答案。

输入格式:
输入在一行中给出两个 [1, 9] 区间内的正整数 A 和 B,用空格分隔。

输出格式:
在一行中输出 A + B 个Wang!

输入样例:

2 1

输出样例:

Wang!Wang!Wang!
#include<stdio.h>
int main(void)
{
    int a,b,i;
    int sum = 0;
    scanf("%d %d",&a,&b);
    sum = a + b;
    for(i = 0; i < sum; i++)
    {
        printf("Wang!");
    }
}

7-9 敲笨钟

微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chong)和“弓”(gong)都压了“ong”韵。于是这句诗就被糟改为“寻章摘句老雕虫,晓月当帘敲笨钟”。

现在给你一大堆古诗词句,要求你写个程序自动将压“ong”韵的句子糟改成“敲笨钟”。

输入格式:
输入首先在第一行给出一个不超过 20 的正整数 N。随后 N 行,每行用汉语拼音给出一句古诗词,分上下两半句,用逗号 , 分隔,句号 . 结尾。相邻两字的拼音之间用一个空格分隔。题目保证每个字的拼音不超过 6 个字符,每行字符的总长度不超过 100,并且下半句诗至少有 3 个字。

输出格式:
对每一行诗句,判断其是否压“ong”韵。即上下两句末尾的字都是“ong”结尾。如果是压此韵的,就按题面方法糟改之后输出,输出格式同输入;否则输出 Skipped,即跳过此句。

输入样例:

5
xun zhang zhai ju lao diao chong, xiao yue dang lian gua yu gong.
tian sheng wo cai bi you yong, qian jin san jin huan fu lai.
xue zhui rou zhi leng wei rong, an xiao chen jing shu wei long.
zuo ye xing chen zuo ye feng, hua lou xi pan gui tang dong.
ren xian gui hua luo, ye jing chun shan kong.

输出样例:

xun zhang zhai ju lao diao chong, xiao yue dang lian qiao ben zhong.
Skipped
xue zhui rou zhi leng wei rong, an xiao chen jing qiao ben zhong.
Skipped
Skipped
#include<stdio.h>
#include<string.h>
int main()
{
	int n,count=0,count_1=0,count_2=0;  //count表示ong出现的次数,count_1表示一句诗中空格的个数,count_2代表排查的时候的空格数
	char str[110];   //尽量把字符串设计的大一点
	scanf("%d",&n);
	getchar();     //天梯赛PTA的bug,在输入的n后面会有一个空格,用getchar()吸收
	for(int i=0;i<n;i++)
	{
		gets(str);
		count=0,count_1=0;    //每一次循环将count和count_1重新设置为0,避免影响下一句
		for(int j=0;j<strlen(str);j++)
		{
			if(str[j]==','&&str[j-1]=='g'&&str[j-2]=='n'&&str[j-3]=='o')
			count++;
			if(str[j]=='.'&&str[j-1]=='g'&&str[j-2]=='n'&&str[j-3]=='o')
			count++;                          //这两个判断很简单,看一个就明白了
			if(str[j]==' ')       //计算这一句古诗中空格的个数
			count_1++;
		}
		if(count==2)       //判断出应该改的诗句
		{
			count_2=0;      //开头重新定义,防止影响下一次
			for(int i=0;i<strlen(str);i++)     //为了方便判断,单个字符输出
			{
				if(str[i]==' ')     //排查空格个数
				count_2++;
				if(count_2==count_1-2)    //当要输出到倒数第三个空格的时候,后面不输出了,直接输出敲笨钟,跳出循环
				{
					printf(" qiao ben zhong.\n");
					break;	
				}
				else
				printf("%c",str[i]);     //倒数第三个空格之前都属按照原样输出
			}
		}
		else
		printf("Skipped\n");  //不用改的直接输出Skipped
	}
	return 0;
 } 

7-10 幸运彩票

彩票的号码有 6 位数字,若一张彩票的前 3 位上的数之和等于后 3 位上的数之和,则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。

输入格式:
输入在第一行中给出一个正整数 N(≤ 100)。随后 N 行,每行给出一张彩票的 6 位数字。

输出格式:
对每张彩票,如果它是幸运的,就在一行中输出 You are lucky!;否则输出 Wish you good luck.

输入样例:

2
233008
123456

输出样例:

You are lucky!
Wish you good luck.
#include<stdio.h>
int main()
{
	int a,b,c,d,e,f,g,h;
	scanf("%d",&a);
    for(b=0;b<a;b++)
    {
    	scanf("%1d%1d%1d%1d%1d%1d",&c,&d,&e,&f,&g,&h);//巧妙的运用了C语言的特性 
    	if(c+d+e==f+g+h)
    	{
    		printf("You are lucky!\n");
		}
		else
		{
			printf("Wish you good luck.\n");
		}
	}
	return 0;
}

7-4 查验身份证
https://blog.csdn.net/qq_44773018/article/details/105923386
7-5 一帮一
https://blog.csdn.net/C_time/article/details/88540811
7-6 古风排版
https://blog.csdn.net/qq_40907345/article/details/79343496
https://blog.csdn.net/qq_63287230/article/details/122832826
https://blog.csdn.net/weixin_45749653/article/details/104125877
7-7 阅览室
https://blog.csdn.net/q1430186623/article/details/110209939

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值