蓝桥测试2->2015年第四届蓝桥杯省赛A组

来源:互联网 发布:淘宝美工各种尺寸 编辑:程序博客网 时间:2024/06/10 04:46

1.方程整数解

方程: a^2 + b^2 + c^2 = 1000

这个方程有正整数解吗?有:a,b,c=6,8,30 就是一组解。 你能算出另一组合适的正整数解吗?

请填写该解中最小的数字。 该解中最小的数字是:10

//三个迭代#include <cstdio>#include <iostream>using namespace std;int main(){for(int a=1;a<32;a++){for(int b=a+1;b<32;b++){for(int c=b+1;c<32;c++){if(a!=6&&a*a+b*b+c*c==1000){cout<<a<<' '<<b<<' '<<c<<endl;return 0;}}}}}//10

2.X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位。比如:

751,520,321 都满足要求,而, 766,918,201 就不符合要求。

现在请你计算一下,按照这样的规定,一共有多少个可用的3位分机号码? 答案:120

//直接枚举所有三位数#include <cstdio>#include <iostream>using namespace std;int main(){int count=0;for(int i=100;i<1000;i++){int num1=i/100;int num2=i%100/10;int num3=i%10;if(num1>num2&&num2>num3){count++;}}cout<<count<<endl;return 0;}
3.

奇妙的数字

小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。

你能猜出这个数字是多少吗? 答案:69

//枚举暴力求解#include <cstdio>#include <cstring>#include <iostream>using namespace std;int main(){int count,book[10];for(int i=1;;i++){int num1=i*i;int num2=i*i*i;count=0;memset(book,0,sizeof(book));while(num1){if(!book[num1%10]){book[num1%10]=1;count++;}num1/=10;}while(num2){if(!book[num2%10]){book[num2%10]=1;count++;}num2/=10;}if(count==10){cout<<i<<endl;break;}}return 0;}

4.二分查找

5.

消除尾一

下面的代码把一个整数的二进制表示的最右边的连续的1全部变成0

如果最后一位是0,则原数字保持不变。

如果采用代码中的测试数据,应该输出:

00000000000000000000000001100111 00000000000000000000000001100000

00000000000000000000000000001100 00000000000000000000000000001100

请仔细阅读程序,填写划线部分缺少的代码。

#include <stdio.h>void f(int x){int i;for(i=0; i<32; i++) printf("%d", (x>>(31-i))&1);printf("   ");x = (17分);for(i=0; i<32; i++) printf("%d", (x>>(31-i))&1);printf("\n");}int main(){f(103);f(12);return 0;}

答案:x=x&(x+1)

位运算

6.7.已总结,见点击打开链接

8.饮料换购(qdulq)   (50分)

饮料换购

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。

请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能喝到多少瓶饮料。

输入:一个整数n,表示开始购买的饮料数量(0<n<10000)

输出:一个整数,表示实际得到的饮料数

例如:

输入:

100

输出:

149

用户输入:

101

程序应该输出:

151

#include <cstdio>#include <iostream>using namespace std;int main(){int count,n;while(cin>>n){count=0;while(n>=3){count+=n/3*3;n=n/3+n%3;}count+=n;cout<<count<<endl;}return 0;}
9.机器人繁殖   (50分)

标题:机器人繁殖

X星系的机器人可以自动复制自己。它们用1年的时间可以复制出2个自己,然后就失去复制能力。 每年X星系都会选出1个新出生的机器人发往太空。也就是说,如果X星系原有机器人5个, 1年后总数是:5 + 9 = 14 2年后总数是:5 + 9 + 17 = 31

如果已经探测经过n年后的机器人总数s,你能算出最初有多少机器人吗?

数据格式:

输入一行两个数字n和s,用空格分开,含义如上。n不大于100,s位数不超过50位。

要求输出一行,一个整数,表示最初有机器人多少个。

例如:

用户输入:

2 31

程序应该输出:

5

用户输入:

97 2218388550399401452619230609499

程序应该输出:

8
//c++没有大整数,这样只能过部分测试点//规律://设首项为a//则a 2*a-1 4*2-3 8*a-7 a6*a-15 ......//可以算出n年后,即前n+1项和为:sum=(a-1)*(2^(n+1)-1)+n+1//直接带入n sum得a#include <cstdio>#include <cstring>#include <iostream>using namespace std;long long int quick_pow(int num,int n){long long int result=1,temp=num;while(n){if(n&1)result*=temp;temp=temp*temp;n=n>>1;}return result;}int main(){int start,n;long long int temp;double sum;while(cin>>n>>sum){temp=quick_pow(2,n+1);start=(int)((sum-n-1)/(temp-1)+1);cout<<start<<endl;}return 0;}

import java.math.BigInteger;import java.util.*;public class Main{public static void main(String []args){int a,n;BigInteger sum,t,temp;Scanner reader = new Scanner(System.in);while(reader.hasNextInt()){n=reader.nextInt();sum=reader.nextBigInteger();t=BigInteger.valueOf(2);t=t.pow(n+1);temp=BigInteger.valueOf(1);t=t.subtract(temp);temp=BigInteger.valueOf(n+1);sum=sum.subtract(temp);sum=sum.divide(t);temp=BigInteger.valueOf(1);sum=sum.add(temp);System.out.println(""+sum);}}}
10.灾后重建   (40分)

灾后重建

Pear市一共有N(<=50000)个居民点,居民点之间有M(<=200000)条双向道路相连。这些居民点两两之间都可以通过双向道路到达。这种情况一直持续到最近,一次严重的地震毁坏了全部M条道路。 震后,Pear打算修复其中一些道路,修理第i条道路需要Pi的时间。不过,Pear并不打算让全部的点连通,而是选择一些标号特殊的点让他们连通。

Pear有Q(<=50000)次询问,每次询问,他会选择所有编号在[l,r]之间,并且 编号 mod K = C 的点,修理一些路使得它们连通。由于所有道路的修理可以同时开工,所以完成修理的时间取决于花费时间最长的一条路,即涉及到的道路中Pi的最大值。

你能帮助Pear计算出每次询问时需要花费的最少时间么?这里询问是独立的,也就是上一个询问里的修理计划并没有付诸行动。

【输入格式】 第一行三个正整数N、M、Q,含义如题面所述。 接下来M行,每行三个正整数Xi、Yi、Pi,表示一条连接Xi和Yi的双向道路,修复需要Pi的时间。可能有自环,可能有重边。1<=Pi<=1000000。

接下来Q行,每行四个正整数Li、Ri、Ki、Ci,表示这次询问的点是[Li,Ri]区间中所有编号Mod Ki=Ci的点。保证参与询问的点至少有两个。

【输出格式】

输出Q行,每行一个正整数表示对应询问的答案。

【样例输入】7 10 41 3 102 6 94 1 53 7 43 6 91 5 82 7 43 2 101 7 67 6 91 7 1 01 7 3 12 5 1 03 7 2 1
【样例输出】9688

【数据范围】 对于20%的数据,N,M,Q<=30 对于40%的数据,N,M,Q<=2000 对于100%的数据,N<=50000,M<=2*10^5,Q<=50000. Pi<=10^6. Li,Ri,Ki均在[1,N]范围内,Ci在[0,对应询问的Ki)范围内。


做法待定......

1 0
原创粉丝点击