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;
}