2016蓝桥杯C语言算法题
输入格式:输入为一个字符串,每个字符都是’0’或’1’,字符串的长度不超过32。
输出格式:输出一个整数。
输入输出样例
样例输入
1101
样例输出
13
*/
#include <stdio.h>
#include <math.h>
#include <string.h>
#define MaxSize 32
void print2Return10(char str[])
}
main()
{
int n;
scanf("%d",&n);
getResult(n);
printf("\n");
return 0;
}
/*
算法训练 薪水计算
问题描述
编写一个程序,计算员工的周薪。薪水的计算是以小时为单位,如果在一周的时间内,员工工作的时间不超过40 个小时,那么他/她的总收入等于工作时间乘以每小时的薪水。如果员工工作的时间在40 到50 个小时之间,那么对于前40 个小时,仍按常规方法计算;而对于剩余的超额部分,每小时的薪水按1.5 倍计算。如果员工工作的时间超过了50 个小时,那么对于前40 个小时,仍按常规方法计算;对于40~50 个小时之间的部分,每小时的薪水按1.5 倍计算;而对于超出50 个小时的部分,每小时的薪水按2 倍计算。请编写一个程序,输入员工的工作时间和每小时的薪水,然后计算并显示他/她应该得到的周薪。
gets(str);
print2Return10(str);
return 0;
}
/*
算法训练 数位分离
问题描述
编写一个程序,输入一个1000 以内的正整数,然后把这个整数的每一位数字都分离出来,并逐一地显示。
输入格式:输入只有一行,即一个1000以内的正整数。
输出格式:输出只有一行,即该整数的每一位数字,之间用空格隔开。
}
return -1;
}
void solve(tstudent student[], int n, int m)
{
char x[21], y[21];
int i,a,b;
for (i=0; i<m; i++)
{
//输入两个人的信息X、Y。通过调用findstudent函数判断这两个人能否成为舞伴
scanf("%s %s",x,y);
for(i=0;i<n;i++)
{
scanf("%s %s %c",student[i].name,student[i].num,&student[i].sex);
}
}
int findstudent(tstudent student[], int n, char* data)
{
int i;
if (data == NULL)
输入格式
第一行一个整数n(2<=n<=1000),表示学生人数。接下来的n行每行依次包含一名新生的姓名、学号、性别,分别用一个空格隔开。
之后的一行是一个整数m(1<=m<=1000),表示询问的数目。接着的m行每行包含两个信息(姓名或学号),保证两个信息不属于同一人,中间用一个空格隔开。
输出格式
对于每个询问输出一行,如果两人可以共舞,输出一个大写字母‘Y’,否则输出一个大写字母‘N’。
输入格式:输入只有一行,包括一个整数和一个实数,分别表示工作时间和每小时薪水。
输出格式:输出只有一个实数,表示周薪,保留小数点后2位。
输入输出样例
样例输入
40 50
样例输出
2000.00
*/
#include <stdio.h>
main()
{
int time;
float money,sum;
scanf("%d%f",&time,&money);
if(time<=40)
{
sum=time*money;
printf("%.2f\n",sum);
}
else
{
time-=40;
if(time<=10)
{
sum=time*money*1.5+40*money;
printf("%.2f\n",sum);
/*
算法训练 新生舞会
问题描述
新生舞会开始了。n名新生每人有三个属性:姓名、学号、性别。其中,姓名用长度不超过20的仅由大小写字母构成的字符串表示,学号用长度不超过10的仅由数字构成的字符串表示,性别用一个大写字符‘F’或‘M’表示。任意两人的姓名、学号均互不相同。换言之,每个人可被其姓名或学号唯一确定。给出m对两人的信息(姓名或学号),判断他们是否能共舞。两人能共舞的充要条件为两人性别相异。
#include <string.h>
#define MaxSize 1000+5
typedef struct
{
char name[21];
char num[21];
char sex;
}tstudent;
void readdata(tstudent student[], int n)
{
int i;
//输入N个学生的信息
if((a=findstudent(student,n,x))!=-1&&(b=findstudent(student,n,y))!=-1)
{
if(student[a].sex!=student.sex)
printf("Y\n");
else
printf("N\n");
}
else
{
printf("N\n");
sum = sum*i;
while(sum%10==0)
sum=sum/10;
if(sum/100>0)
sum=sum%100;
}
printf("%d",sum%10);
return 0;
}
/*
算法训练 进制转换
问题描述
编写一个程序,输入一个二进制的字符串(长度不超过32),然后计算出相应的十进制整数,并把它打印出来。
struct tstudent
{
char name[21];
char num[21];
char sex;
};
void readdata(tstudent student[], int n)
{
输入N个学生的信息
}
int findstudent(tstudent student[], int n, char* data)
if(!num)
return 0;
while(num)
{
i=num%10;
if(i||flag)
{
if(!flag)
{
number=i;
}
else
{
number=number*10+i;
}
flag=1;
}
num/=10;
}
return number;
}
main()
{
int n,m;
scanf("%d%d",&n,&m);
输入格式:输入只有一个整数n。
输出格式:输出只有一个整数,即n! 最右边的那个非0的数字。
输入输出样例
样例பைடு நூலகம்入
6
样例输出
2
*/
#include<stdio.h>
int main(void)
{
int n;
int i;
int sum=1;
scanf("%d",&n);
for(i=n;i>=1;i--)
{
{
scanf("%c",&ch);
printResult(str,ch);
}
return 0;
}
/*
算法训练 阶乘
问题描述
一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中;而35!就更大了,它已经无法存放在一个浮点型变量中。因此,当n比较大时,去计算n!是非常困难的。幸运的是,在本题中,我们的任务不是去计算n!,而是去计算n!最右边的那个非0的数字是多少。例如,5! = 1*2*3*4*5 = 120,因此5!最右边的那个非0的数字是2。再如:7! = 5040,因此7!最右边的那个非0的数字是4。请编写一个程序,输入一个整数n(n<=100),然后输出n! 最右边的那个非0的数字是多少。
输入输出样例
样例输入
769
样例输出
7 6 9
*/
#include <stdio.h>
void getResult(int num)
{
//出口
if(num<10)
{
printf("%d ",num);
return ;
}
//递归
getResult(num/10);
printf("%d ",num%10);
输入格式:输入只有一行,包括两个整数,中间用空格隔开。
输出格式:输出只有一行,即相应的结果。
输入输出样例
样例输入
435 754
样例输出
199