每日10题4
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 <= i, j, k <= N
- 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;
}