1561: [蓝桥杯][算法提高VIP]计算质因子

题目描述
输入一个整数,输出其所有质因子。

数据规模和约定
1< =n< =10000。
输入
输入只有一行,包含一个整数n。
输出
输出一行,包含若干个整数,为n的所有质因子,按照从小到大的顺序排列。
样例输入

6 

样例输出

2 3

思路

  • 质因子在数论里是指能整除给定正整数的质数。
  • 255的因子有1 、3、5、15、17、51、85、255。其中是质数的是1、3、5、17 所以255的质因子就是1、3、5、17。所以最大质因子是17。55不是255的因子,也不是质数,当然不是255的最大质因子。
#include<stdio.h>
int main(){
	int n,i,m;
	scanf("%d",&n);
	for(i=2;i<=n;i++){
		if(n%i==0){
			if(m!=i){
				printf("%d ",i);
			}
			m=i;
			n=n/i;i--;
		}
	}
	return 0;
}

1569: [蓝桥杯][算法提高VIP]输入输出格式练习

题目描述
按格式格式读入一个3位的整数、一个实数、一个字符 。
并按格式输出 一个整数占8位左对齐、一个实数占8位右对齐、一个字符 ,并用|隔开。
输入

输出

样例输入

123456.789|a 

样例输出

123     |   456.8|a
#include<stdio.h>
int main(){
	int n;
	double m;
	char a;
	scanf("%3d %lf|%c",&n,&m,&a);
	printf("%-8d|%8.1lf|%c",n,m,a);
	return 0;
}

1570: [蓝桥杯][算法提高VIP]输出九九乘法表

题目描述
编制程序,按格式打印九九乘法表。

注意:表头的大小写要和样例一致,短线“-”个数要与样例中一致,否则系统会判为错误。

输入

输出

样例输入

样例输出

  Nine-by-nine Multiplication Table
--------------------------------------
     1   2   3   4   5   6   7   8   9
--------------------------------------
 1   1
 2   2   4
 3   3   6   9
 4   4   8  12  16
 5   5  10  15  20  25
 6   6  12  18  24  30  36
 7   7  14  21  28  35  42  49
 8   8  16  24  32  40  48  56  64
 9   9  18  27  36  45  54  63  72  81
--------------------------------------

思路:注意空格

#include<stdio.h>
int main(){
	int i,j;
	printf(" Nine-by-nine Multiplication Table\n");
	printf("--------------------------------------\n");
	printf(" 1 2 3 4 5 6 7 8 9\n");
	printf("--------------------------------------\n");
	for(i=1;i<=9;i++){
		printf(" %d ",i);
		for(j=1;j<=i;j++){
			printf("%2d ",i*j);
		}
		printf("\n");
	}
	printf("--------------------------------------\n");
	return 0;
}

1571: [蓝桥杯][算法提高VIP]输出正反三角形

题目描述
使用循环结构打印下述图形,打印行数n由用户输入。图中每行事实上包括两部分,中间间隔空格字符数m也由用户输入。

注意:两行之间没有空行。
输入

输出

样例输入
5 4
样例输出

   *    *********
   ***    *******
  *****    *****
 *******    ***
*********    *
#include<stdio.h>
int main(){
	int i,j,n,m;
	scanf("%d %d",&n,&m);
	for(i=0;i<n;i++){
		for(j=0;j<m+n-i-1;j++){//空格数为m+n-i-1个
			printf(" ");
		}
		for(j=0;j<2*i+1;j++){
			printf("*");
		}
		for(j=0;j<m;j++){
			printf(" ");
		}
		for(j=0;j<2*(n-i)-1;j++){
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

1579: [蓝桥杯][算法提高VIP]陶陶摘苹果2

题目描述
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知n个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度。假设她碰到苹果,苹果就会掉下来。请帮陶陶算一下,经过她的洗劫后,苹果树上还有几个苹果。
输入
 输入包括两行数据。第一行只包括两个正整数n(5< =n< =200)和m(60< =m< =200),表示苹果数目和桃桃伸手可 达到的高度(以厘米为单位)。第二行包含n个100到200之间(包括100和200)的整数(以厘米为单位)分别表示苹果到地面的高度,两个相邻的整数 之间用一个空格隔开。
输出
输出包括一行,这一行只包含一个整数,表示陶陶不能够摘到的苹果的数目。
样例输入

10  110 
100  200  150  140  129  134  167  198  200  111 

样例输出

5
#include<stdio.h>
int main(){
	int i,n,m,a,count=0;
	scanf("%d %d",&n,&m);
	for(i=0;i<n;i++){
		scanf("%d",&a);
		if(a>(m+30)){
			count++;
		}
	}
	printf("%d\n",count);
	return 0;
}

1584: [蓝桥杯][算法训练VIP]判定字符位置

题目描述
返回给定字符串s中元音字母的首次出现位置。英语元音字母只有‘a’、‘e’、‘i’、‘o’、‘u’五个。
若字符串中没有元音字母,则返回0。
只考虑小写的情况。
输入

输出

样例输入

and 

样例输出

1
#include<stdio.h>
int main(){
	char a[100];
	int i;
	scanf("%s",a);
	for(i=0;i<strlen(a);i++){
		if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u'){
			printf("%d",i+1);
			return 0;
		}
	}
	printf("0\n");
	return 0;
}

1585: [蓝桥杯][算法训练VIP]链表数据求和操作

题目描述
读入10个复数,建立对应链表,然后求所有复数的和。
输入

输出

样例输入

1  2 
1  3 
4  5 
2  3 
3  1 
2  1 
4  2 
2  2 
3  3 
1  1 

样例输出

23+23i
#include<stdio.h>
int main(){
	int a[10],b[10],i,m=0,n=0;
	for(i=0;i<10;i++){
		scanf("%d %d",&a[i],&b[i]);
		m=m+a[i];
		n=n+b[i];
	}
	if(m==0){
		if(n==0)	printf("0");
		else	printf("%di",n);
	}else if(n==0)	printf("%d",m);
	else if(n>0)	printf("%d+%di",m,n);
	else	printf("%d%di",m,n);
	return 0;
}

1586: [蓝桥杯][算法训练VIP]A+B problem

题目描述

  • Given two integers A and B, your task is to output their sum, A+B.

输入

  • The input contains of only one line, consisting of two integers A and B. (0 ≤ A,B ≤ 1 000)

输出

  • The output should contain only one number that is A+B.

样例输入

1  1 

样例输出

2
#include<stdio.h>
int main(){
	int a,b;
	scanf("%d %d",&a,&b);
	printf("%d",a+b);
	return 0;
}

1635: [蓝桥杯][算法训练VIP]整数平均值

题目描述
编写函数,求包含n个元素的整数数组中元素的平均值。要求在函数内部使用指针操纵数组元素,其中n个整数从键盘输入,输出为其平均值。

(样例说明:5为输入数据的个数,3 4 0 0 2 是以空格隔开的5个整数)

输入

输出

样例输入

5  
3  4  0  0  2 

样例输出

1
#include<stdio.h>
int main(){
	int a,i,sum=0;
	scanf("%d",&a);
	int b[a];
	for(i=0;i<a;i++){
		scanf("%d",&b[i]);
		sum=sum+b[i];
	}
	printf("%d",sum/a);
	return 0;
}

1636: [蓝桥杯][算法训练VIP]整除问题

题目描述
编写一个程序,输入三个正整数min、max和factor,然后对于min到max之间的每一个整数(包括min和max),如果它能被factor整除,就把它打印出来。
输入
输入只有一行,包括三个整数min、max和factor。
输出
输出只有一行,包括若干个整数。
样例输入

1  10  3 

样例输出

3 6 9
#include<stdio.h>
int main(){
	int a,b,c,i;
	scanf("%d %d %d",&a,&b,&c);
	for(i=a;i<=b;i++){
		if(i%c==0){
			printf("%d ",i);
		}
	}
	return 0;
}

1804: [蓝桥杯][算法提高] c++_ch02_02

题目描述
使用Switch语句编写一个模拟简单计算器的程序。依次输入两个整数和一个字符,并用空格隔开。如果该字 符是一个“+”,则打印和;如果该字符是一个“-”,则打印差;如果该字符是一个“*”,则打印积;如果该字符是“/”,则打印商;如果该字符是一个 “%”,则打印余数。打印结果后输出一个空行。
输入
3 4 +
输出
7

样例输入

3 4 +

样例输出

7
#include<stdio.h>
int main(){
	int a,b;
	char c;
	scanf("%d %d %c",&a,&b,&c);
	switch(c){
		case '+':printf("%d\n",a+b);break;
		case '-':printf("%d\n",a-b);break;
		case '*':printf("%d\n",a*b);break;
		case '/':printf("%d\n",a/b);break;
		case '%':printf("%d\n",a%b);break;
		default:break;
	}
	return 0;
}

1805: [蓝桥杯][算法提高] c++_ch02_03

题目描述
编写程序实现“剪刀,石头,布”游戏。在这个游戏中,两个人同时说“剪刀”,“石头”或“布”,压过另一方的为胜者。规则是:“布”胜过“石头”,“石头”胜过“剪刀”,“剪刀”胜过“布”。要求:选择结构中使用枚举类型,结果的输出也使用枚举类型表示。
输入:两个数,范围为{0,1,2},用空格隔开。0表示石头,1表示布,2表示剪刀。这两个数分别表示两个人所说的物品。
输出:如果前者赢,输出1。如果后者赢,输出-1。如果是平局,输出0。
输入
两个数,范围为{0,1,2},用空格隔开。0表示石头,1表示布,2表示剪刀。这两个数分别表示两个人所说的物品。

输出
如果前者赢,输出1。如果后者赢,输出-1。如果是平局,输出0。

样例输入

0 2

样例输出

1
#include<stdio.h>
int main(){
	int a,b;
	scanf("%d %d",&a,&b);
	if(a==b){
		printf("0");
	}else if((a==0&&b==2)||(a==2&&b==1)||(a==1&&b==0)){
		printf("1");
	}else{
		printf("-1");
	}
	return 0;
}

1813: [蓝桥杯][算法提高] c++_ch03_02

题目描述
PASCAL三角是形状如下的三角矩阵:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
在PASCAL三角中的每个数是一个组合C(n,k)。
C(n,k)=(((((((n/1)(n-1))/2(n-2))/3)***(n-k+2))/(k-1))(n-k+1))/k
公式中交替使用乘法和除法,每次将从n开始递减的一个值相乘,然后除以下一个从1开始递增的值。
如果对行和列从0开始计数,则数字C(n,k)在n行k列。例如C(6,2)在第6行第2列。编程输出指定阶数的PASCAL三角矩阵。例如下面给出的是12阶PASCAL三角形矩阵。

编写程序,使运行结果为:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1

输入

输出

样例输入

3

样例输出

           1   
        1     1   
     1     2     1   
  1     3     3     1   
#include <stdio.h>
int main(){
	int a,i,j;
	int num[15][15]={0};
	scanf("%d",&a);
	for(i=0;i<=a;i++)//把第一列和对角线列赋值为1 
		num[i][0]=num[i][i]=1;
	for(i=2;i<=a;i++){//赋值其他列,注意行下标从2开始 
		for(j=1;j<i;j++){
			num[i][j]=num[i-1][j-1]+num[i-1][j];
		}
	}
	for(i=0;i<=a;i++){//输出杨辉三角形 
		for(j=0;j<a-i;j++){
			printf(" ");//输出前面的空格3个 
		}
		for(j=0;j<=i;j++){
			printf("%3d ",num[i][j]);
		}
		printf("\n");
	} 
	return 0;
}

1853: [蓝桥杯][基础练习]数列排序

题目描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200

输入
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。

输出
输出一行,按从小到大的顺序输出排序后的数列。
样例输入

5
8 3 6 4 9

样例输出

3 4 6 8 9
#include <stdio.h>
int cmp(const void *a,const void *b){//自定义函数
    return *(int*)a - *(int*)b;
}
int main(){
    int n,a[100],i;
    scanf("%d",&n);
    for(i=0;i<n;i++){//读入每个值
        scanf("%d",&a[i]);
    }
    qsort(a,i,sizeof(a[0]),cmp);//调用函数
    for(i=0;i<n;i++){//输出每个值
        printf("%d ",a[i]);
    }
    return 0;
}

1915: [蓝桥杯][算法提高VIP]三个整数的排序

题目描述
输入三个数,比较其大小,并从大到小输出。

输入
一行三个整数。

输出
一行三个整数,从大到小排序。

样例输入

33 88 77

样例输出

88 77 33
#include <stdio.h>
int cmp(const void *a,const void *b){
	return *(int*)b - *(int*)a;
}
int main(){
	int a[100],i;
	for(i=0;i<3;i++){
		scanf("%d",&a[i]);
	}
	qsort(a,i,sizeof(a[0]),cmp);
	for(i=0;i<3;i++){
		printf("%d ",a[i]);
	}
	return 0;
}

1933: [蓝桥杯][算法提高VIP]约数个数

题目描述
输入一个正整数N,输出N的约数个数
输入
12
输出
6
样例输入

样例输出

提示

  • 12的约数包括:1,2,3,4,6,12。共6个
#include <stdio.h>
int main(){
	int a,i,n=0;
	scanf("%d",&a);
	for(i=1;i<=a;i++){
		if(a%i==0){//能被a整除的数,即为约数
			n++;
		}
	}
	printf("%d",n);
	return 0;
}

2194: [蓝桥杯][2018年第九届真题]递增三元组

题目描述
给定三个整数数组
A = [A1, A2, … AN],
B = [B1, B2, … BN],
C = [C1, C2, … CN],
请你统计有多少个三元组(i, j, k) 满足:

  1. 1 <= i, j, k <= N
  2. Ai < Bj < Ck

输入

  • 第一行包含一个整数N。 第二行包含N个整数A1, A2, … AN。 第三行包含N个整数B1, B2, … BN。 第四行包含N个整数C1, C2, … CN。

提示

  • 对于30%的数据,1 <= N <= 100
  • 对于60%的数据,1 <= N <= 1000
  • 对于100%的数据,1 <= N <= 100000 0 <= Ai, Bi, Ci <= 100000

输出
一个整数表示答案
样例输入

3
1 1 1
2 2 2
3 3 3

样例输出

27
#include<stdio.h>
int cmp(const void *a,const void *b){
	return *(int*)a - *(int*)b;
}
int main(){
    int a[1000],b[1000],c[1000];
    int t[1000]={0};
    int n,i,j,k,count=0;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(i=0;i<n;i++){
        scanf("%d",&b[i]);
    }
    for(i=0;i<n;i++){
        scanf("%d",&c[i]);
    }
    qsort(a,i,sizeof(a[0]),cmp);
    qsort(b,i,sizeof(b[0]),cmp);
    qsort(c,i,sizeof(c[0]),cmp);
    i=n-1,j=n-1;
    while(i>=0&&j>=0){//数组a与数组b进行比较,此法为线性比较 
		if(b[j]>a[i]){//b[j]如果大于a[i] ,则b[j]大于a[i]前边的所有数 
			t[j]=i+1;//所以个数为i+1(i从0开始的) 
			j--;//b往前移 
		}else
			i--;//a往前移 
	}
	i=0;j=0;
	while(i<=n-1&&j<=n-1){//数组b与数组c进行比较,此法为线性比较 
		if(c[j]>b[i]){//c[j]如果大于b[i] ,则c[j]后边的所有数都大于b[i]
			count=count+t[i]*(n-j);
			i++;//b往后移 
		}else
			j++;//c往后移 
	}
    printf("%d\n",count);
    return 0;
} 
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
int a[MAXN],b[MAXN],c[MAXN];
int n,sum;

int main(){
  cin>>n;
  for(int i=0;i<n;i++)scanf("%d",&a[i]);
  for(int i=0;i<n;i++)scanf("%d",&b[i]);
  for(int i=0;i<n;i++)scanf("%d",&c[i]);
  sort(a,a+n);
  sort(b,b+n);
  sort(c,c+n);
  sum = 0;
  for(int i=0;i<n;i++){
    int x = (lower_bound(a,a+n,b[i]) - a);
    int y = (n - (upper_bound(c,c+n,b[i]) - c));
    sum += x*y;
  }
  cout<<sum;
  return 0;
}