蓝桥-3.17

递增序列 - 蓝桥云课 (lanqiao.cn)——重做

#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
 
/*
30行50列
(对0~28行):
1.从左往右,以第0~48列为起点,看其右边有几个字母能与其形成递增序列
2.从左往右,以第0~49列为起点,看其与其正下方、左下角(可反转)、右下角(不可反转)的字母是否形成递增序列
对第29行:从左往右,以第0~48列为起点,看其右边有几个字母能与其形成递增序列
*/
 
int main()
{
    string str[30];
    int res = 0;
    for (int i = 0; i < 30; i++)
        cin >> str[i];
    for (int i = 0; i < 30; i++)
    {
        for (int j = 0; j < 49; j++)//看其右边有几个字母能与其形成递增序列
        {
            for (int k = j + 1; k < 50; k++)
                if (str[i][j] < str[i][k]) //递增
                    res++;
        }
        if (i != 29)//看其与其正下方、左下角(可反转)、右下角(不可反转)的字母是否形成递增序列
        {
            for (int j = 0; j < 50; j++)
            {
                for (int k = i + 1; k < 30; k++)//正下方
                    if (str[i][j] < str[k][j])
                        res++;
                for (int k = i + 1; k < 30; k++)//左下角
                    if (j != 0 && j - (k - i) >=0 && str[i][j] != str[k][j - (k - i)])
                        res++;
                for (int k = i + 1; k < 30; k++)//右下角
                    if (j != 49 && j + (k - i) < 50 &&str[i][j] < str[k][j + (k - i)])
                        res++;
            }
        }
    }
    cout << res;
    return 0;
}

递增序列 - 蓝桥云课 (lanqiao.cn)用string s[30]比用char a[30][50]方便的多!

 

既然这个排序是基于冒泡排序的,要最短的字符串
那么就按最多的排序次数算,这样就能得到最短字符串
冒泡排序有N个元素,它完全乱序时,最多需要
 (n-1)+(n-2)+...+1=n(n-1)/2

(15*14)/2=105,那么15个字符时,可以获得100次冒泡排序

abcdefghijklmno——这是前15个字母

onmlkjihgfedcba——看似是要的答案

但是注意,这个字符串需要的排序次数是105不是100,所以我们还要-5次

把处在第6位的j提到字符串首,这样它就免去了5次交换

所以答案是

 jonmlkihgfedcba

#include <iostream>
#include<cmath>
#include <algorithm>
using namespace std;


int main(){
  	int n;
  	cin>>n;
  	int *score=new int[n];
  	cin>>score[0];
  	int min=score[0];
  	int max=score[0];
	double sum=score[0];
  	for(int i=1;i<n;i++){
   		cin>>score[i];
   		if(score[i]<min)
   			min=score[i];
   		if(score[i]>max)
   			max=score[i];
   		sum+=score[i];
   	}
   	
      	cout<<max<<endl<<min<<endl;
		printf("%.2f",round( (sum/n) * 100 )/100);    //坑点在于最后能整除,也要输出80.00这样
   	
 
  return 0;
}

仍是注意round()如何使小数进行四舍五入的位数保留 

#include <iostream>
#include<cmath>
#include <algorithm>
using namespace std;


int main(){
  	int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  	int year=2000,m=1,d=1,w=6,cnt=0; //从这一天开始 
  	while(1){
  		if(d==1 || w==1)cnt+=2;	//月初和周一+2 
  			else cnt++;
  		if(year==2020 && m==10 && d==1)
  			break;				//到这一天退出 
  		w=(w+1)%7;				//周日相当于0 
  		d++;
  		//闰年2月
  		if( m==2 && (year%4==0 && year%100!=0 || year%400==0)){
  			if(d>29){
  				d=1;m+=1;
			  } 
		  }
		  else if(d>month[m]){
		  	d=1;
		  	m+=1;
		  }
		  if(m==13){
		  	year+=1;
		  	m=1;
		  }
	  }
	  cout<<cnt;
	 
  	return 0;
}

#include<iostream>
#include<cmath>
#include<vector>
using namespace std;

//判断素数 
bool IsP(int n){
	for(int i=2;i<=sqrt(n);i++)
		if(n%i==0)
		return false;
	return true;
} 

int main(){
	int sum=1;	//首项就算一个 
	int next;	//看看下一个是不是素数决定要不要继续进行 
	for(int i=2;i<50000;i++){	//枚举素数首项 
		if(IsP(i)){		//这个数是素数才能开始 
			for(int d=1;d<10000;d++)//枚举公差 
			for(int n=1;n<10;n++){	//an=i+(n-1) d
				next=i+n*d;
				if(IsP(next)) sum++;
				else{
					sum=1;break;
				}
				if(sum==10){
					cout<<d;
					return 0;
				}
			} 
		}
	}
}

 

#include<iostream>
#include<cmath>
#include<vector>
using namespace std;



int main(){
	int a[40];
	a[1]=1;
	for(int i=2;i<40;i++){
		if(i%2==0)
			a[i]=a[i-1]+1;
		else if(i%2!=0)
			a[i]=a[i-1]+2*(i-1);
	}
	cout<<a[39];
}

 找的规律,看列与数的关系,再看列与对角线数的关系

发现:

        奇数列下一个数是q+1

        偶数列下一个数是q+2n

        第n列对应的对角线第n个数是n+(n-1)那个数斜线上的

        每斜线列有n个元素,一半就是2/n,所以是这个代码输出的结果-2/n

#include <iostream>
#include<cmath>
using namespace std;
int main()
{
  // 请在此输入您的代码
  //32/8=4B
  //256MB=2^(8+20)B
  long long n=pow(2,26);
  cout<<n;
  return 0;
}

 

#include <iostream>
#include<cmath>
using namespace std;

int gcd(int m,int n){
	if(n==0)return m;
	else
	return gcd(n,m%n);
}
int main()
{
	int cnt=0;
  for(int zi=1;zi<=2020;zi++){
  	for(int mu=1;mu<=2020;mu++){
  		if(gcd(zi,mu)==1)
  			cnt++;
	  }
  }
  cout<<cnt;
  return 0;
}

要求的值为

                                                1

                                              10

                                            100     

                                        ········   

10000000000000000000000..0(63个0)                   

因此加在一起,就是64个1           

【法1】        unsigned long long 可以表示64位1,即2^64-1

                        所以可以声明一个这种类型的变量num=pow(2,64)

                        cout<<(num+1)/2-1

【法2】

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值