算法-蓝桥杯习题(3-4)

 

蓝桥杯习题

 

目录

 

入门训练(详见 算法-蓝桥杯习题(1-1)Go

 

基础练习(详见 算法-蓝桥杯习题(2-1)Go

基础练习(详见 算法-蓝桥杯习题(2-2)Go

算法训练(详见 算法-蓝桥杯习题(3-1)Go

算法训练(详见 算法-蓝桥杯习题(3-2)Go

算法训练(详见 算法-蓝桥杯习题(3-3)Go

算法训练(详见 算法-蓝桥杯习题(3-4)Go

算法训练(详见 算法-蓝桥杯习题(3-5)Go

算法训练(详见 算法-蓝桥杯习题(3-6)Go

算法提高(详见 算法-蓝桥杯习题(4-1)Go

算法提高(详见 算法-蓝桥杯习题(4-2)Go

算法提高(详见 算法-蓝桥杯习题(4-3)Go

 

历届试题(详见 算法-蓝桥杯习题(5-1)Go

 

历届试题(详见 算法-蓝桥杯习题(5-2)Go

 

蓝桥杯练习系统评测数据

链接: https://pan.baidu.com/s/1brjjmwv
密码: iieq

 

 

 

算法训练(PartD-19题)

 

 

/*
算法训练 奇偶判断

问题描述
  能被2整除的数称为偶数,不能被2整除的数称为奇数。给一个整数x,判断x是奇数还是偶数。
输入格式
  输入包括一个整数x,0<=x<=100000000。
输出格式
  如果x是奇数,则输出“odd”,如果是偶数,则输出“even”。
样例输入
10
样例输出
even
样例输入
2009
样例输出
odd
*/
#include <stdio.h>

main()
{
	unsigned int x;
	
	while(scanf("%d",&x)!=EOF)
	{
		if(x%2)
		{
			printf("odd\n");
		}
		else
		{
			printf("even\n");
		}
	}
	
	return 0;
}

 

/*
算法训练 平方计算

问题描述
  输入正整数a, m,输出a^2%m,其中^表示乘方,即a^2表示a的平方,%表示取余。
输入格式
  输入包含两个整数a, m,a不超过10000。
输出格式
  输出一个整数,即a^2%m的值。
样例输入
5 6
样例输出
1
*/
#include <stdio.h>

main()
{
	unsigned int a,m;
	
	scanf("%d%d",&a,&m);
	
	printf("%d\n",a*a%m);
	
	return 0;
}

 

/*
算法训练 乘法表

问题描述
  输出九九乘法表。
输出格式
  输出格式见下面的样例。乘号用“*”表示。
样例输出
下面给出输出的前几行:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
……
*/
#include <stdio.h>

main()
{
	int i,j;
	
	for(i=1;i<10;i++)
	{
		for(j=1;j<i+1;j++)
		{
			printf("%d*%d=%d ",i,j,i*j);
		}
		printf("\n");
	}
	
	return 0;
}

 

/*
算法训练 大小写判断

问题描述
  给定一个英文字母判断这个字母是大写还是小写。
输入格式
  输入只包含一个英文字母c。
输出格式
  如果c是大写字母,输出“upper”,否则输出“lower”。
样例输入
x
样例输出
lower
样例输入
B
样例输出
upper
*/
#include <stdio.h>
#include <string.h>

main()
{
	char letter;
	
	letter=getchar();
	
	if(letter>='A'&&letter<='Z')
	{
		printf("upper\n");
	}
	if(letter>='a'&&letter<='z')
	{
		printf("lower\n");
	}
	else
	{
		
	}
	
	return 0;
}

 

#include "iostream"
#include "string"
#include "stdio.h"
using namespace std;
const int N =1000;
bool  bArrange[N][N];
int main()
{
	int n;
	cin>>n;
	int row=(1<<n);
	int volumn=1<<(n-1);
	for(int i = 0; i< row-1 ; i++ )
	{
		cout<<"<"<<i+1<<">"<<"1-"<<i+2;
		bool isArrage[N]={false};
		isArrage[1]=isArrage[i+2]=true;
		bArrange[1][i+2]=bArrange[i+2][1]=true;
		for(int j  =1 ; j< volumn ; j++)
		{
			int a;
			for( a=2;a<=row;a++)
				if(isArrage[a]==false)
					break;
			for(int b=a+1;b<=row;b++)
			{
				if(bArrange[a][b]==false&&isArrage[b]==false)
				{
					bArrange[a][b]=bArrange[b][a]=true;
					isArrage[a]=isArrage[b]=true;
					cout<<" "<<a<<"-"<<b;
					break;
				}
			}

		}
		cout<<endl;
	}
		return 0;
}

 

/*
算法训练 字符串编辑

问题描述
  从键盘输入一个字符串(长度<=40个字符),并以字符 ’.’ 结束。编辑功能有:1 D:删除一个字符,命令的方式为: D a 其中a为被删除的字符,例如:D s 表示删除字符 ’s’ ,若字符串中有多个 ‘s’,则删除第一次出现的。
  2 I:插入一个字符,命令的格式为:I a1 a2 其中a1表示插入到指定字符前面,a2表示将要插入的字符。例如:I s d 表示在指定字符 ’s’ 的前面插入字符 ‘d’ ,若原串中有多个 ‘s’ ,则插入在最后一个字符的前面。
  3 R:替换一个字符,命令格式为:R a1 a2 其中a1为被替换的字符,a2为替换的字符,若在原串中有多个a1则应全部替换。
  在编辑过程中,若出现被改的字符不存在时,则给出提示信息。
输入格式
  输入文件stringedit.in共两行,第一行为原串(以’.’结束),第二行为命令(输入方式参见“问题描述” 。
输出格式
  输出文件stringedit.out共一行,为修改后的字符串或输出指定字符不存在的提示信息。
样例输入
This is a book.
D s
样例输出
Thi is a book.
D s
输入输出样例解释
  命令为删去s,第一个在字符中出现的s在This中,即得到结果。
*/
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        StringBuffer sb = new StringBuffer(sc.nextLine());
        String s = sc.next();
        if (s.equalsIgnoreCase("D")) {
            String a = sc.next();
            int l = sb.indexOf(a);
            System.out.println(sb.deleteCharAt(l));
        } else if (s.equalsIgnoreCase("I")) {
            String a1 = sc.next();
            String a2 = sc.next();
            int l = sb.lastIndexOf(a1);
            System.out.println(sb.insert(l, a2));
        } else if (s.equalsIgnoreCase("R")) {
            String a1 = sc.next();
            String a2 = sc.next();
            if (sb.indexOf(a1) == -1)
                System.out.println("\u6307\u5b9a\u5b57\u7b26\u4e0d\u5b58\u5728");
            else
                System.out.println(sb.toString().replace(a1, a2));
        }
    }
}

/*
//此答案错误,当时用取巧的方式做的,答案也和测试数据一样,但不知错哪了(用循环链表构建字符串试试) 
#include <stdio.h>
#include <string.h>
#define MaxSize 45

void printDelectResult(char *str,char letter)
{
	int i=0,st=0,sp=0;
	
	while(str[i]!='.')
	{
		if(!st&&str[i]==letter)
		{
			st=1;
		}
		
		if(!sp&&st)
		{
			i++;
			if(str[i]=='.')
			break;
			sp=1;
		}
		printf("%c",str[i]);
		i++;
	}
	
	printf(".\n");
	
	return ;
}

void printInsertResult(char *str,char a1,char a2)
{
	int i=0,k=0;
	
	while(str[i]!='.')
	{
		i++;
		if(str[i]==a1)
		{
			k=i;
		}
	}
	
	i=0;
	while(str[i]!='.')
	{	
		if(i==k)
		{
			putchar(a2);
		}
		putchar(str[i]);
		i++;
	}
	
	printf(".\n");
	return ;
}

void printReplaceResult(char *str,char a1,char a2)
{
	int i=0;
	
	while(str[i]!='.')
	{
		if(str[i]==a1)
		{
			putchar(a2);
		}
		else
		{
			putchar(str[i]);
		}
		i++;
	}
	printf(".\n");
	
	return ;
}

main()
{
	char str[MaxSize],T,a1,a2;
	int i=0,j;
	
	str[i]=getchar();
	while(str[i]!='.')
	{
		i++;
		str[i]=getchar();
	}
	
	T=getchar();
	getchar();//接收空格键 
	
	
	if(T=='D'||T=='d')
	{
		a1=getchar();
		printDelectResult(str,a1);
	}
	else if(T=='I'||T=='i')
	{
		a1=getchar();
		getchar();//接收空格键 
		a2=getchar();
		printInsertResult(str,a1,a2);
	}
	else if(T=='R'||T=='r')
	{
		a1=getchar();
		getchar();//接收空格键 
		a2=getchar();
		printReplaceResult(str,a1,a2);
	}
	
	return 0;
}
*/

 

/*
  算法训练 最大值与最小值的计算  
时间限制:1.0s   内存限制:512.0MB
       
  输入11个整数,计算它们的最大值和最小值。
样例输入
0 1 2 3 4 5 6 7 8 9 10
样例输出
10 0
*/
#include<stdio.h>
int main()
{
    int n;
    int a[11],i1,max=-234234,min=93759347;
    for(i1=0;i1<11;i1++)
    {
        scanf("%d",&a[i1]);
        if(max<a[i1])
          max=a[i1];
        if(min>a[i1])
           min=a[i1];
    }
    printf("%d %d\n",max,min);
    
    return 0;
}

 

/*
  算法训练 判定数字  
时间限制:1.0s   内存限制:512.0MB
       
  编写函数,判断某个给定字符是否为数字。
样例输入
9
样例输出
yes
*/
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) 
{
    char x;
    scanf("%c",&x);
    if('0'<=x&&x<='9')
    {
        printf("yes");
    }
    else
    {
        printf("no");
    }
    return 0;
}

 

/*
  算法训练 字符串逆序  
时间限制:1.0s   内存限制:512.0MB
       
  输入一个字符串,长度在100以内,按相反次序输出其中的所有字符。
样例输入
tsinghua
样例输出
auhgnist
*/
#include <stdio.h>
#include <string.h>
#define MaxSize 100

int main()
{
    char str[MaxSize];
    int lenth;
    
    gets(str);
    lenth=strlen(str);
    while(lenth--)
    {
        putchar(str[lenth]);
    }
    printf("\n");
    
    return 0;
}

 

/*
算法训练 最长字符串  
时间限制:1.0s   内存限制:512.0MB
       
  求出5个字符串中最长的字符串。每个字符串长度在100以内,且全为小写字母。
样例输入
one two three four five
样例输出
three
*/
#include<stdio.h>
#include<string.h>
int main()
{
    char str[5][100];
    int len[5];
    int i,j,t,max;
    max=0;
    for(i=0;i<5;i++)
    {
        scanf("%s",str[i]);
        len[i]=strlen(str[i]);
        if(len[i]>max)
        {
            max=len[i];
            t=i;
        }    
    }
    puts(str[t]);
    return 0;
}

 

/*
算法训练 比较字符串

 编程实现两个字符串s1和s2的字典序比较。(保证每一个字符串不是另一个的前缀,且长度在100以内)。若s1和s2相等,输出0;若它们不相等,则指出其第一个不同字符的ASCII码的差值:如果s1>s2,则差值为正;如果s1<s2,则差值为负。
样例输入
java basic
样例输出
8
*/
#include<stdio.h>
#include<string.h>
int min(int a,int b)
{
return a>b?b:a;
}
int main()
{
char a[1000];
char b[1000];
scanf("%s",a);
scanf("%s",b);
int k=min(strlen(a),strlen(b)),i1;
int ok=1;
for(i1=0;i1<k;i1++)
{       if(a[i1]!=b[i1])
        {   printf("%d\n",a[i1]-b[i1]);
            ok=0;
             break;
         }
}
if(ok==1)
if(strlen(a)==strlen(b))
    printf("0\n");
else if(strlen(a)>strlen(b))
     printf("%d\n",a[i1]);
 else 
    printf("%d\n",b[i1]);
return 0;  
}

 

/*
算法训练 成绩的等级输出

  输入一个百分制的成绩t后,按下式输出它的等级。等级为:90~100为A,80~89为B,70~79为C,60~69为D,0~59为E。
样例输入
98
样例输出
A
*/
#include<stdio.h>
int main()
{
    int t;
    scanf("%d",&t);
    
    if(t>=90 && t<=100)
    printf("A\n");
    
    if(t>=80 && t<=89)
    printf("B\n");
    
    if(t>=70 && t<=79)
    printf("C\n");
    
    if(t>=60 && t<=69)
    printf("D\n");
    
    if(t<60)
    printf("E\n");
    return 0;
}

 

/*
算法训练 统计字符次数

  输入一个字符串(长度在100以内),统计其中数字字符出现的次数。
样例输入
Ab100cd200
样例输出
6
*/
#include<stdio.h>
int main()
{
    char a[101];
    int i=0,s=0;
    gets(a);
    for(i=0;*(a+i)!='\0';i++)
    {
        if(*(a+i)>=48&&*(a+i)<=57)
        s++;
    }
    printf("%d",s);
return 0;
}

 

/*
算法训练 连接字符串

 编程将两个字符串连接起来。例如country与side相连接成为countryside。
  输入两行,每行一个字符串(只包含小写字母,长度不超过100);输出一行一个字符串。
样例输入
country
side
样例输出
countryside
*/
#include<stdio.h>
#include<string.h>
int main()
{
    char s1[202],s2[202];
    scanf("%s",s1);
    scanf("%s",s2);
    strcat(s1,s2);
    printf("%s",s1);
    printf("\n");
    return 0;
}

 

/*
算法训练 筛选号码

问题描述
  有n个人围成一圈,顺序排号(编号为1到n)。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子。从下一个人开始继续报数,直到剩下最后一个人,游戏结束。
  问最后留下的是原来第几号的那位。
  举个例子,8个人围成一圈:
  1 2 3 4 5 6 7 8
  第1次报数之后,3退出,剩下:
  1 2 4 5 6 7 8    (现在从4开始报数)
  第2次报数之后,6退出,剩下:
  1 2 4 5 7 8     (现在从7开始报数)
  第3次报数之后,1退出,剩下:
  2 4 5 7 8     (现在从2开始报数)
  第4次报数之后,5退出,剩下:
  2 4 7 8     (现在从7开始报数)
  第5次报数之后,2退出,剩下:
  4 7 8     (现在从4开始报数)
  第6次报数之后,8退出,剩下:
  4 7     (现在从4开始报数)
  最后一次报数之后,4退出,剩下:
  7.
  所以,最后留下来的人编号是7。
输入格式
  一个正整数n,(1<n<10000)
输出格式
  一个正整数,最后留下来的那个人的编号。
样例输入
8
样例输出
7
数据规模和约定
  对于100%的数据,1<n<10000。
*/
#include <stdio.h> 
#include <malloc.h> 
typedef struct form{ 
    int num; 
    int date; 
    struct form *link;} 
del; 
del *creat(int n){ 
int i; 
del *head,*p1,*p2; 
head=(del *)malloc(sizeof(del)); 
p1=(del *)malloc(sizeof(del)); 
head->link=p1; 
for(i=1;i<=n-2;i++){p2=(del *)malloc(sizeof(del)); 
p1->link=p2; 
p1=p2;} 
p1->link=head; 
return(head); 
} 
void dateop(del *h,int n){ 
    del *p; 
    int i,j=1; 
    p=h; 
    for(i=1;i<=n;i++){ 
    p->num=i; 
    p->date=j;j++; 
    if(j==4) j=1; 
    p=p->link;} 
} 
int deal(del *h,int n){ 
    del *k; 
    int s; 
    int count,j=1,i; 
    count=n; 
    k=h; 
    while(count!=1){ 
    if(j==3&&k->date!=0) {k->date=0;count--;} 
k=k->link; 
    j++; 
    if(k->date==0) j--; 
if(j==4) j=1; 
    } 
    k=h; 
    for(i=1;i<=n;i++){ 
    if(k->date!=0) {s=k->num;break;} 
    k=k->link;} 
    return(s);} 
int main(){ 
    int x; 
    int i; 
    del *p; 
    scanf("%d",&x); 
    p=creat(x); 
    dateop(p,x); 
    x=deal(p,x); 
    for(i=1;i<x;i++){ 
    p=p->link;} 
    printf("%d",p->num); 
return 0; 
}

 

/*
算法训练 十进制数转八进制数

  编写函数把一个十进制数输出其对应的八进制数。
样例输入
9274
样例输出
22072
*/
#include<stdio.h>
int main()
{
    int r;
    scanf("%d",&r);
    printf("%o",r);
    return 0;
}

 

/*
算法训练 斜率计算

  输入两个点的坐标,即p1 = (x1, y1)和p2=(x2, y2),求过这两个点的直线的斜率。如果斜率为无穷大输出“INF”。
样例输入
1 2
2 4
样例输出
2
样例输入
1 2
1 4
样例输出
INF
样例输入
1 2
3 2
样例输出
0
*/
#include <stdio.h>
int main(){
  int a,b,c,d;
  scanf("%d %d",&a,&b);
  scanf("%d %d",&c,&d);
  if(a==c)
      printf("INF\n");
  else 
      printf("%d\n",(b-d)/(a-c));

  return 0;
}

 

/*
算法训练 确定元音字母位置

输入一个字符串,编写程序输出该字符串中元音字母的首次出现位置,如果没有元音字母输出0。英语元音字母只有‘a’、‘e’、‘i’、‘o’、‘u’五个。
样例输入
hello
样例输出
2
样例输入
apple
样例输出
1
样例输入
pmp
样例输出
0
*/
#include <stdio.h>
#include <string.h>
char s[1000]={0};
int isyuanyin(char a)
{
switch(a)
{
case 'a':return 1;
case 'e':return 1;
case 'i':return 1;
case 'o':return 1;
case 'u':return 1;
}
return 0;
}
int main()
{
int l,i,num=0;
scanf("%s",s);
l=strlen(s);
for(i=0;i<l;i++)
if(isyuanyin(s[i]))
{
num=i+1;break;
}
printf("%d",num);
return 0;
}

 

/*
算法训练 整数平均值

编写函数,求包含n个元素的整数数组中元素的平均值。要求在函数内部使用指针操纵数组元素,其中n个整数从键盘输入,输出为其平均值。  样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以空格隔开的5个整数)
  5
  3 4 0 0 2
样例输出
1
样例输入
7
3 2 7 5 2 9 1
样例输出
4
*/
#include <stdio.h>
int main()
{
int n,i,j,sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&j);
sum+=j;
}
printf("%d",sum/n);
return 0;
}

 

GoToTheNextPart

 

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是刷算法备战蓝桥杯的一些建议和步骤: 1. 熟悉蓝桥杯的考试内容和题型。了解蓝桥杯的考试规则、题目类型和难度分布,可以从蓝桥杯官方网站或者相关的参考资料中获取这些信息。 2. 学习基础知识。蓝桥杯的题目通常涉及到算法和数据结构的基础知识,例如数组、链表、栈、队列、树、图、排序算法、查找算法等。建议先学习这些基础知识,掌握它们的原理和常见的应用场景。 3. 刷题练习。通过刷题来提高算法和编程能力是非常重要的。可以选择一些经典的算法题目进行练习,例如ACM/ICPC、LeetCode、牛客网等平台上的题目。刷题的过程中要注重理解题目的要求,分析问题的解决思路,编写代码实现解决方案,并进行调试和测试。 4. 参加模拟考试。蓝桥杯的模拟考试可以帮助你熟悉考试的流程和题目类型,也可以检验你的学习成果。参加模拟考试后,可以分析自己的得分情况,找出自己的不足之处,并进行针对性的复习和提高。 5. 学习优秀的解题思路和代码。在刷题的过程中,可以学习一些优秀的解题思路和代码,了解不同的解题方法和技巧。可以通过查阅相关的参考书籍、博客、论坛等获取这些信息。 6. 多做实战训练。除了刷题,还可以参加一些实战训练,例如参加ACM/ICPC比赛、编程竞赛等。这些实战训练可以提高你的编程能力和解题速度,也可以锻炼你的团队合作和应对压力的能力。 7. 多与他人交流和讨论。与他人交流和讨论可以帮助你更好地理解和掌握算法和编程知识。可以加入一些算法学习群组、论坛或者参加一些线下的学习活动,与其他学习者一起交流和分享经验。 8. 坚持练习和复习。刷算法题是一个长期的过程,需要坚持不懈地练习和复习。每天保持一定的学习时间,不断积累和提高自己的算法和编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值