CSUC语言期中考试 小帅疯狂搞事-爱代码爱编程
CSUC语言期中考试题解析
1.小帅搞的第一件事
给小帅一个字符串,由大写字母构成,每个字母限用一次,请问最多能组成多少个CSU。
本题大致上与考试模拟题虚空之力类似,统计C、S、U中的最小值即可。
见代码:
#include <stdio.h>
int main()
{
int i;
int min;
int x=0,y=0,z=0;
char a[1000]="\0";
while(scanf("%s",a)!=EOF)//输入字符串,存入字符数组中
{
for(i=0;a[i]!='\0';i++)//对字符数组进行逐个读取
{
if(a[i]=='C')//统计C的数量
{
x++;
}
if(a[i]=='S')//统计S的数量
{
y++;
}
if(a[i]=='U')//统计U的数量
{
z++;
}
}
min=x<y?(x<z?x:z):(y<z?y:z);//计算最小值
printf("%d\n",min);//打印输出
for(i=0;a[i]!='\0';i++)//对数组进行清空
{
a[i]='\0';
}
x=y=z=0;//归零
}
return 0;//每日好习惯+1
}
小帅搞的第二件事
小帅身上有a元b角c分钱,包子需要d元e角f分钱,请问小帅最多能买几个包子?
全都化成单位为分,送分题,懂得都懂
见代码
#include<stdio.h>
int main()
{
long sum1,sum2;
int a,b,c,d,e,f;
while(scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f)!=EOF)//直接输
{
sum1=100*a+10*b+c;
sum2=100*d+10*e+f;
printf("%ld\n",sum1/sum2);//直接除
}
return 0;//每日好习惯+2
}
小帅搞的第三件事
小帅和小明打算把一个重量为n的西瓜切成两块,他们想要知道,是否至少存在一种切法,使得得到的两块西瓜重量都是偶数,你能否帮他们回答这个问题?
偶数中除了2其他都行,奇数都不行,我只能说懂得都懂,不懂的我也不多说了
见代码:
#include <stdio.h>
int main()
{
long weight;
while(scanf("%ld",&weight)!=EOF)//输入重量
{
if(weight==2)//特例排除
{
printf("NO\n");
}
else
{
if(weight%2==0)//除了2的偶数都行
{
printf("YES\n");
}
else//其他的都不行
{
printf("NO\n");
}
}
}
return 0;//每日好习惯+3
}
小帅搞的第四件事
编程计算y=f(x)的程序,其中:
y=x*x x<1
y=2x-1 1<=x<10
y=3x-12 x>=10
直接见代码:
#include <stdio.h>
#include <math.h>
int f(int x)//函数体
{
if(x<1)
{
return pow(x,2) ;
}
if(x>=1&&x<10)
{
return 2*x-1;
}
if(x>=10)
{
return 3*x-12;
}
}
int main()//主函数
{
int x;
while(scanf("%d",&x)!=EOF)
{
printf("%d\n",f(x));//直接代
}
return 0;
}
小帅搞的第五件事
小帅用字符输出一个如同样例格式的沙漏的图形。要求如下:
1.用-做上下底
2.用\和/做斜边
3.用*表示沙子
4.上层沙子空一行,其他行填满;下层沙子只有中间一列。
5.上下底的行首无空格,所有行的行末无空格。好家伙,我直接好家伙!
见代码:
#include <stdio.h>
int main()
{
int n,x,i,a,b;
scanf("%d",&n);
while(n--)//样例的个数
{
scanf("%d",&x);
for(i=1;i<x;i++)
{
printf("-");//输入“-”
}
printf("\n");//输入沙漏的第一行
printf("\\");
for(i=1;i<x-2;i++)//在第一行添加需要的空格
{
printf(" ");
}
printf("/\n");//第一行结束输入,换行
for(i=x/2-2;i>0;i--)//循环输入沙漏上部含沙子的部分
{
for(b=1;b<=x/2-2-i+1;b++)//在前部打印合适的空格
{
printf(" ");
}
printf("\\");
for(a=1;a<=2*i-1;a++)//输入沙子“*”
{
printf("*");
}
printf("/\n");//结束沙漏上半部分的输入,结束第一部分循环
}
for(i=x/2-1;i>0;i--)//循环输入沙漏的下半部分
{
for(b=i-1;b>0;b--)//同上,在前部打印适量空格
{
printf(" ");
}
printf("/");
for(a=1;a<=2*(x/2-i)-1;a++)//循环输入中间部分的沙子和空格
{
if(a==x/2-i)//判定沙漏的中间部分
{
printf("*");
}
else//不是,则输出空格
{
printf(" ");
}
}
printf("\\");
printf("\n");//换行
}
for(i=1;i<x;i++)//同沙漏的顶部,接着输出沙漏的底部
{
printf("-");
}
printf("\n\n");//两次\n表示空一行
}
return 0;//每日好习惯+5
}
因为走一步,想一步,该代码的效率并不高,如果有更高效的代码,抱紧大佬的大腿!
小帅搞的第六件事
小帅接到一个任务,就是要找出一个整数n!中末尾到底有多少个0,请你帮帮他。
这题博主这个菜鸟看错了,以为要统计所有的0,然鹅高精度算法博主用的不熟(老菜鸡了),之后才看到是末尾有多少零,我太难了!
借了朋友的几行代码如下:
#include <stdio.h> //数几个5的因子就好
#include <math.h>
int main()
{
int n;
int j;
while(~scanf("%d",&n))
{
j=n/5+n/25+n/125+n/625+n/3125;//只要求n<=10000,5的倍数计算一次,25的倍数计算两次,以此类推
printf("%d\n",j);
}
return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/kuangleizhishang/article/details/111107876