【C语言】备战校赛Day1

举报
修修修也 发表于 2024/07/26 11:26:43 2024/07/26
【摘要】 ​日期:11.1 星期二L1-001 Hello World题目描述这道超级简单的题目没有任何输入。你只需要在一行中输出著名短句“Hello World!”就可以了。输入样例:无输出样例:Hello World!​编辑解题代码int main(){printf("Hello World!");return 0;}该题较为简单,但要注意输出格式,保险的做法是将输出样例直接复制到printf语句...

日期:11.1 星期二

L1-001 Hello World

题目描述

这道超级简单的题目没有任何输入。

你只需要在一行中输出著名短句“Hello World!”就可以了。

输入样例:

输出样例:

Hello World!

​编辑


解题代码

int main()

{

printf("Hello World!");

return 0;

}

该题较为简单,但要注意输出格式,保险的做法是将输出样例直接复制到printf语句中,较为节省时间并且准确率高.


提交结果

 ​编辑


L1-002 打印沙漏

题目描述

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

*****

***

*

***

*****

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

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

输入样例:

19 *

输出样例:

*****
 ***
  *
 ***
*****
2

​编辑

 ​编辑


解题代码

#include<stdio.h>

void print(int n,char ch)

{

int i = 0;

//打印上半层

for (i = n; i > 0; i-=2)

{

int j = i;//星号数等于层数

int k = (n - i) / 2;//空格数等于层数-星号数再除2

while (k > 0) //循环打印空格

{

printf(" ");

k--;

}

while (j > 0) //再循环打印星号

{

printf("%c",ch);

j--;

}

printf("\n");

}

//打印下半层

for (i = 3; i <= n; i+=2)

{

int j = i; //星号数等于层数

int k = (n - i) / 2; //空格数等于层数-星号数再除2

while (k > 0)

{

printf(" ");

k--;

}

while (j > 0)

{

printf("%c",ch);

j--;

}

printf("\n");

}

}




int main()

{

int n=0;

char ch;

scanf("%d %c",&n,&ch);

//算层数,层数=顶层**个数

int sn=n;

int i=1;

while(sn>0)//拿sn来从中间层向外减,直到减为负,跳出循环

{

i+=2;

sn-=2*i;

}

sn=sn+2*i-1;//最后一步减为负了,我们给它加回去

i-=2; //最后一步的i也减超了,加回去得到真实的i

print(i,ch); //把层数和字符类型传给函数

printf("%d",sn); //打印统计的剩下多余的符号

return 0;

}

该题的解题步骤为:

1. 先算层数/最高层符号数(哪个都行,因为这两相等).

2. 编写打印沙漏函数.(先打印沙漏上半段,再打印沙漏下半段).

更多细节见代码注释.


提交结果

​编辑


L1-003 个位数统计

题目描述

给定一个 k 位整数 N=dk110k1++d1101+d0 (0di9, i=0,,k1, dk1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。

输入格式:

每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。

输出格式:

对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。

输入样例:

100311

输出样例:

0:2
1:3
3:1

​编辑


解题代码

#include<stdio.h>

#include<string.h>

int main()

{

char n[1001];//因为N不超过1000位,所以整型没法用

scanf("%s",n);

int l=strlen(n);//算n的位数,后面循环要用

int arr[10]={0};//创建一个数组存放0-9出现的次数

int i=0,k=0;

while(l>0) //遍历n

{

i=n[k]-'0'; //i的值就是n的数值

//因为是字符型,所以要减去符号'0'

(arr[i])++;

//i是几就给数组下标的数字+1

k++; //访问下一个n数组元素

l--; //给遍历长度-1

}

//然后循环打印arr数组元素就可以了

for(i=0;i<10;i++)

{

if(arr[i]!=0)//当然,打印的前提是该数字出现次数不等于0

{

//数组下标恰好是记录的数字

printf("%d:%d\n",i,arr[i]);

}

}

return 0;

}

该题解题步骤:

1. 循环统计n中出现的数字的个数,存入数组中

2. 循环打印数组即可

更多细节详见代码注释.


提交结果

​编辑


​编辑


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。