#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】