<span>每日10题1</span>
1486: [蓝桥杯][算法提高VIP]一元一次方程
题目描述
- 输入一元一次方法的ax+b=0的解。且数据均在double类型以内,且一定有解(保留2位小数)
输入
- a b两个数
输出
- x的值
样例输入
- 2 6
样例输出
- -3.00
#include <stdio.h>
int main(){
double a,b;
double x=0;
scanf("%lf %lf",&a,&b);
x=(-b)/a;
printf("%.2lf",x);
return 0;
}
1487: [蓝桥杯][算法提高VIP]不同单词个数统计
题目描述
- 编写一个程序,输入一个句子,然后统计出这个句子当中不同的单词个数。例如:对于句子“one little two little three little boys”,总共有5个不同的单词:one, little, two, three, boys。
说明:(1)由于句子当中包含有空格,所以应该用gets函数来输入这个句子;(2)输入的句子当中只包含英文字符和空格,单词之间用一个空格隔开;(3)不用考虑单词的大小写,假设输入的都是小写字符;(4)句子长度不超过100个字符。
输入
- 输入只有一行,即一个英文句子。
输出
- 输出只有一行,是一个整数,表示句子中不同单词的个数。
样例输入
- one little two little three little boys
样例输出
- 5
#include <stdio.h>
int main(){
int i,j=0,m=0,n=0,con=0;
char a[100],b[100][100];
gets(a);
for(i=0;i<strlen(a);i++){
if(a[i]!=' '){
b[m][j]=a[i];
j++;
}else{
m++;
j=0;
}
}
for(i=0;i<=m;i++){
for(j=i+1;j<=m;j++){
if(strcmp(b[i],b[j])==0){
strcpy(b[j],"");
}
}
}
for(i=0;i<=m;i++){
if(strcmp(b[i],"")==0){
con++;
}
}
printf("%d",m-con+1);
return 0;
}
// strlen 函数用来求字符串的长度(包含多少个字符)。
// strcpy() 函数用于对字符串进行复制(拷贝)
// strcmp() 函数用于对两个字符串进行比较(区分大小写)。
1491: [蓝桥杯][算法提高VIP]交换Easy
题目描述
- 给定N个整数组成的序列,每次交换当前第x个与第y个整数,要求输出最终的序列。
输入
- 第一行为序列的大小N(1< =N< =1000)和操作个数M(1< =M< =1000)。
第二行包含N个数字,表示初始序列。
接下来M行,每行两个整数x,y (1< =x,y< =N),表示要交换的两个整数。在一次交换中,如果x和y相等,则不会改变序列的内容。
输出
- 输出N行,为交换后的序列中的数。
样例输入
5 2
1 2 3 4 5
1 2
3 4
样例输出
2
1
4
3
5
#include <stdio.h>
int main(){
int n,m,i,a[1000],x,y,t;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<m;i++){
scanf("%d %d",&x,&y);
t=a[x-1];
a[x-1]=a[y-1];
a[y-1]=t;
}
for(i=0;i<n;i++){
printf("%d\n",a[i]);
}
return 0;
}
1494: [蓝桥杯][算法提高VIP]企业奖金发放
题目描述
- 企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元 时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万元到60万元 之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%;高于100万元时,超过100万元的部分按1%提成。从键盘输入当月利润,求应发放奖金总数?(保留两位小数)利润的大小在double以内
输入
- 利润
输出
- 应发奖金总数,保留两位小数
样例输入
- 210000
样例输出
- 18000.00
#include <stdio.h>
int main(){
double n;
scanf("%lf",&n);
if(n<=100000){
printf("%.2lf",n*0.1);
}else if(n>100000 && n<200000){
printf("%.2lf",(n-100000)*0.075+100000*0.1);
}else if(n>=200000 && n<400000){
printf("%.2lf",(n-200000)*0.05+100000*0.075+100000*0.1);
}else if(n>=400000 && n<600000){
printf("%.2lf",(n-400000)*0.03+200000*0.05+100000*0.075+100000*0.1);
}else if(n>=600000 && n<1000000){
printf("%.2lf",(n-600000)*0.015+200000*0.03+200000*0.05+100000*0.075+100000*0.1);
}else{
printf("%.2lf",(n-1000000)*0.01+400000*0.015+200000*0.03+200000*0.05+100000*0.075+100000*0.1);
}
return 0;
}
1489: [蓝桥杯][算法提高VIP]乘法运算
题目描述
编制一个乘法运算的程序。
从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出。
样例输入
16 8
样例输出
16
× 8
━━━
128
8×16=128,则第四行128右侧对准个位输出。计算完成,不再输出。
再例如:
输:
87x76
输出:
87
×76
━━━
522
609
━━━
6612
输入
输入只有一行,是两个用空格隔开的数字,均在1~99之间(含1和99)。
输出
输出为4行或7行,符合乘法的竖式运算格式。
注意,乘号和下划线为特殊符号,可以从样例中复制黏贴。
样例输入
5 2
样例输出
5
× 2
━━━
10
#include <stdio.h>
int main(){
int a,b;
while(scanf("%d %d",&a,&b)!=EOF){
printf("%4d\n",a);
printf("×%2d\n",b);//×是中文符号,占了2个字符
printf("━━━\n");//中文的格式
if(b<10){
printf("%4d\n",a*b);
}else{
if(b%10==0){
printf(" 00\n");//24*20,这种情况第4行是显示“ 00”的哦。
}else{
printf("%4d\n",a*(b%10));
}
printf("%3d\n",a*(b/10));
printf("━━━\n");
printf("%4d\n",a*b);
}
}
return 0;
}
1490: [蓝桥杯][算法提高VIP]五次方数
题目描述
对一个数十进制表示时的每一位数字乘五次方再求和,会得到一个数的五次方数
例如:1024的五次方数为1+0+32+1024=1057
有这样一些神奇的数,它的五次方数就是它自己,而且这样的数竟然只有有限多个
从小到大输出所有这样的数
输入
无
输出
每个数独立一行输出
样例输入
无
样例输出
无
#include <stdio.h>
int main(){
int i, t, sum = 0;
for(i = 10; i < 354294; i++) {
t = i;
while (t != 0) {
sum += (int)pow(t%10, 5);
t = t / 10;
if(sum > i) {
break;
}
}
if(sum == i) {
printf("%d\n", sum);
}
sum = 0;
}
return 0;
}
1493: [蓝桥杯][算法提高VIP]任意年月日历输出
题目描述
已知2007年1月1日为星期一。
设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印。
为完成此函数,设计必要的辅助函数可能也是必要的。其中输入为年分和月份。
注意:短线“-”个数要与题目中一致,否则系统会判为错误。
输入
年月和月份
输出
无
样例输入
2010 9
样例输出
---------------------
Su Mo Tu We Th Fr Sa
---------------------
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
---------------------
思路
- 正常解题步骤
- 自定义函数
- 注意中文格式(坑点,
提交了13次,格式错误17%
)
#include <stdio.h>
static int mon[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int run(int year) {//闰年判断函数
if(((year%4 == 0) && (year%100 != 0)) || (year%4 == 0))
return 1;
else
return 0;
}
int Xingqi(int year, int month) {//获取星期几的函数
int week, sum = 0, i, j;
for(i = 2007; i < year; i++) {
if(1 == run(i))
sum += 366;
else
sum += 365;
}
if((1 == run(year)) && (month > 2)) {//求出在year的month前的天数和
mon[2]++;
}
for(j = 1; j < month; j++) {
sum += mon[j];
}
week = (sum%7+1)%7;
return week;
}
int main () {
int nian, yue, ri, i, j;
scanf("%d %d", &nian,&yue);
ri = Xingqi(nian, yue); //获取星期几,返回的数值是0~6
printf("---------------------\n");
printf(" Su Mo Tu We Th Fr Sa\n");
printf("---------------------\n");
for(i = 0; i < ri; i++) {
printf(" ");//前置输出部分,每一个星期几对应3个空格
}
for(j = 1; j <= mon[yue]; j++) {
printf("%3d", j);
ri++;
if((7 == ri)) {
printf("\n");
ri = 0;
}//星期六之后输出\n
}
if(ri == 0);//特殊情况:在最后一天为星期六时不输出\n ,如2015年2月
else
printf("\n");
printf("---------------------\n");
return 0;
}
1504: [蓝桥杯][算法提高VIP]勾股数
题目描述
勾股数是一组三个自然数,a < b < c,以这三个数为三角形的三条边能够形成一个直角三角形
输出所有a + b + c < = 1000的勾股数
a小的先输出;a相同的,b小的先输出。
输入
无
输出
每行为一组勾股数,用空格隔开
样例输入
无
样例输出
3 4 5
5 12 13
6 8 10
思路
- 定义三个变量a,b,c,其中a,b作为直角边,c作为斜边;
- 根据题中的信息,以及三角形的三边关系判断a,b的取值范围;
- 求出a^2 +b^2的算术平方根的值,并判断是否为整数;
- 是整数就赋值给c,并比较三个数是否小于等于1000;
- a,b参考范围:3<=a<333、3<=b<500
- 3<=a<333;因为三个数的平均值是333,而a的值最小,如果a大于了333,三个数之和也会大于1000;
- 3<=b<500,因为b小于c,如果b大于了500,那么c也必须大于500,显然不满三个数小于1000;
- sqrt函数功能: 一个非负实数的平方根
#include <stdio.h>
int main () {
int a,b,c;
for(a=3;a<300;a++){
for(b=a;b<500;b++){//如果b大于了500,那么c也必须大于500;显然不满足三个数<1000;
if(sqrt(a*a+b*b)==(int)sqrt(a*a+b*b)){
c=sqrt(a*a+b*b);
if(c<=1000-a-b){//判断是否满足题给的条件和三角形三边的关系
printf("%d %d %d\n",a,b,c);
}
}
}
}
return 0;
}
1505: [蓝桥杯][算法提高VIP]单词个数统计
题目描述
编写一个程序,输入一个字符串(长度不超过80),然后统计出该字符串当中包含有多少个单词。例如:字符串“this is a book”当中包含有4个单词。
输入
- 输入一个字符串,由若干个单词组成,单词之间用一个空格隔开。
输出
- 输出一个整数,即单词的个数。
样例输入
this is a book
样例输出
4
#include <stdio.h>
int main () {
char a[100];
int i,count=1;
gets(a);
for(i=0;i<strlen(a);i++){//判断条件一定要全
if((a[i]==' ')&&(a[i+1]>='a'&&a[i+1]<='z'||a[i+1]>='A'&&a[i+1]<='Z')){
count++;
}
}
printf("%d",count);
return 0;
}
1503: [蓝桥杯][算法提高VIP]前10名
题目描述
数据很多,但我们经常只取前几名,比如奥运只取前3名。现在我们有n个数据,请按从大到小的顺序,输出前10个名数据。
数据规模和约定
10< =n< =200,各个整数不超出整型范围
输入
两行。
第一行一个整数n,表示要对多少个数据
第二行有n个整数,中间用空格分隔。表示n个数据。
输出
一行,按从大到小排列的前10个数据,每个数据之间用一个空格隔开。
样例输入
26
54 27 87 16 63 40 40 22 61 6 57 70 0 42 11 50 13 5 56 7 8 86 56 91 68 59
样例输出
91 87 86 70 68 63 61 59 57 56
自定义从大到小排序
int cmp ( const void *a , const void *b )
{
return *(int *)b - *(int *)a;
}
AC
#include <stdio.h>
int cmp ( const void *a , const void *b )
{
return *(int *)b - *(int *)a;
}
int main () {
int n,i,a[200];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
qsort(a,i,sizeof(a[0]),cmp);//调用排序函数
for(i=0;i<10;i++){//输出前十个
printf("%d ",a[i]);
}
return 0;
}