问题一:回文数
问题描述 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。 输出格式 按从小到大的顺序输出满足条件的四位十进制数。
思路:分别求出这个四位数的每一个位上的数,然后做比较
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=5e3+10; 4 int dp[maxn][3]; 5 int a[10000]; 6 int main(){ 7 ios::sync_with_stdio(0); 8 memset(a,0,sizeof(a)); 9 for(int i=1000;i<10000;i++){ 10 int a=i/1000; 11 int b=(i-a*1000)/100; 12 int c=(i-a*1000-b*100)/10; 13 int d=i%10; 14 if(a==d&&b==c){ 15 cout<<i<<endl; 16 } 17 } 18 return 0; 19 }
给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
1 2 3 4 5
2
1 5 2
2 3 2
2
对于30%的数据,n,m<=100;
对于100%的数据,n,m<=1000;
保证k<=(r-l+1),序列中的数<=106。
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=5e3+10; 4 int dp[maxn][3]; 5 int a[1000]; 6 int b[1000]; 7 bool cmp(int a,int b){ 8 return a>b; 9 } 10 int main(){ 11 ios::sync_with_stdio(0); 12 memset(b,0,sizeof(b)); 13 memset(a,0,sizeof(a)); 14 int n; 15 cin>>n; 16 for(int i=1;i<=n;i++) 17 cin>>a[i]; 18 int m; 19 cin>>m; 20 for(int i=1;i<=m;i++){ 21 int l,r,k; 22 cin>>l>>r>>k; 23 for(int j=0, i=l;i<=r;i++,j++){ 24 b[j]=a[i]; 25 } 26 for(int i=0;i<r-l+1-1;i++){ 27 for(int j=0;j<r-l+1-1-i;j++){ 28 if(b[j]<b[j+1]){ 29 int temp=b[j]; 30 b[j]=b[j+1]; 31 b[j+1]=temp; 32 } 33 } 34 } 35 cout<<b[k-1]<<endl; 36 } 37 return 0; 38 }
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
8 3 6 4 9
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #include <queue> 5 #include <vector> 6 #include <algorithm> 7 #include <stack> 8 9 using namespace std; 10 const int maxn=222; 11 int a[maxn]; 12 void InsertSort(int *a,int n){ 13 for(int i=1;i<n;i++){ 14 if(a[i]<a[i-1]){ 15 int j=i-1; 16 int x=a[i]; 17 a[i]=a[i-1]; 18 while(x<a[j-1]&&j>0) a[j]=a[j-1],j--; 19 a[j]=x; 20 } 21 } 22 } 23 void ShellSort(int *a,int n){ 24 for(int k=n/2;k;k/=2){ 25 for(int i=k;i<n;i++){ 26 for(int j=i-k;j>=0;j-=k) 27 if(a[j]>a[j+k]) swap(a[j],a[j+k]); 28 } 29 } 30 } 31 void SelectSort(int *a,int n){ 32 for(int i=0;i<n;i++){ 33 int k=i; 34 for(int j=i+1;j<n;j++){ 35 if(a[j]<a[k]) k=j; 36 if(k!=i) swap(a[i],a[k]); 37 } 38 } 39 } 40 void SelectSort2(int *a,int n){ 41 for(int i=0;i<n/2;i++){ 42 int mink=i,maxk=n-i-1; 43 } 44 } 45 int main(){ 46 ios::sync_with_stdio(0); 47 int n; 48 cin>>n; 49 memset(a,0,sizeof(a)); 50 for(int i=0;i<n;i++){ 51 cin>>a[i]; 52 } 53 // Quick_sort(a,1,n); 54 ShellSort(a,n); 55 for(int i=0;i<n;i++){ 56 if(!i)cout<<a[i]; 57 else cout<<" "<<a[i]; 58 } 59 cout<<endl; 60 return 0; 61 }
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制
十六进制每一位 对应4位二进制数,八进制对应3位二进制数,十六进制生成二进制后,
在转化八进制前,要查看长度是不是三的倍数,如果不是,则用0补齐.之后在转化八进制开始要判断
开头的三个是不是"000"的形式,如果是则不算在八进制数里.
1 #include <iostream> 2 #include <iostream> 3 #include <stdio.h> 4 #include <string.h> 5 #include <queue> 6 #include <vector> 7 #include <algorithm> 8 #include <stack> 9 using namespace std; 10 11 int main(){ 12 ios::sync_with_stdio(0); 13 int n; 14 cin>>n; 15 int sum; 16 while(n--){ 17 string s1,s2; 18 cin>>s1; 19 s2=""; 20 sum=0; 21 for(int i=0;i<s1.length();++i){ 22 switch (s1[i]) { 23 case ‘0‘: s2+="0000";break; 24 case ‘1‘: s2+="0001";break; 25 case ‘2‘: s2+="0010";break; 26 case ‘3‘: s2+="0011";break; 27 case ‘4‘: s2+="0100";break; 28 case ‘5‘: s2+="0101";break; 29 case ‘6‘: s2+="0110";break; 30 case ‘7‘: s2+="0111";break; 31 case ‘8‘: s2+="1000";break; 32 case ‘9‘: s2+="1001";break; 33 case ‘A‘: s2+="1010";break; 34 case ‘B‘: s2+="1011";break; 35 case ‘C‘: s2+="1100";break; 36 case ‘D‘: s2+="1101";break; 37 case ‘E‘: s2+="1110";break; 38 case ‘F‘: s2+="1111";break; 39 default:break; 40 } 41 } 42 int len=s2.length(); 43 int flag=0; 44 if(len%3==1){ 45 s2="00"+s2; 46 }else if(len%3==2){ 47 s2="0"+s2; 48 } 49 for(int i=0;i<=s2.length()-3;i+=3){ 50 sum=4*(s2[i]-‘0‘)+2*(s2[i+1]-‘0‘)+(s2[i+2]-‘0‘); 51 if(sum) 52 flag=1; 53 if(flag) 54 cout<<sum; 55 } 56 cout<<endl; 57 } 58 return 0; 59 }
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
1 #include <iostream> 2 #include <iostream> 3 #include <stdio.h> 4 #include <string.h> 5 #include <queue> 6 #include <vector> 7 #include <algorithm> 8 #include <math.h> 9 #include <stack> 10 typedef long long ll; 11 using namespace std; 12 int a[15]; 13 int main(){ 14 ios::sync_with_stdio(0); 15 string s; 16 cin>>s; 17 ll sum=0; 18 int len=s.length(); 19 for(int i=0;i<s.length();++i){ 20 if(‘A‘<=s[i]&&s[i]<=‘F‘){ 21 s[i]=(int)(s[i]-‘A‘)+10+‘0‘; 22 } 23 sum+=((s[i]-‘0‘)*(pow(16,len-1-i))); 24 } 25 cout<<sum<<endl; 26 return 0; 27 }
基础练习 闰年判断
给定一个年份,判断这一年是不是闰年。
当以下情况之一满足时,这一年是闰年:
1. 年份是4的倍数而不是100的倍数;
2. 年份是400的倍数。
其他的年份都不是闰年。
说明:当试题指定你输出一个字符串作为结果(比如本题的yes或者no,你需要严格按照试题中给定的大小写,写错大小写将不得分。
1 #include <iostream> 2 #include <iostream> 3 #include <stdio.h> 4 #include <string.h> 5 #include <queue> 6 #include <vector> 7 #include <algorithm> 8 #include <math.h> 9 #include <stack> 10 #include <set> 11 12 typedef long long ll; 13 using namespace std; 14 int a[]={16,256,4096,65536,1048576,16777216,268435456}; 15 char b[]={‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘}; 16 set<int>s; 17 18 int main(){ 19 ios::sync_with_stdio(0); 20 int y; 21 cin>>y; 22 if(y<1990||y>2050) return 0; 23 if((y%4==0&&y%100!=0)||y%400==0){ 24 cout<<"yes"<<endl; 25 }else{ 26 cout<<"no"<<endl; 27 } 28 return 0; 29 }
基础练习 字母图形
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
BABCDEF
CBABCDE
DCBABCD
EDCBABC
ABCDE
BABCD
CBABC
DCBAB
EDCBA
FEDCB
GFEDC
HGFED
IHGFE
JIHGF
KJIHG
LKJIH
MLKJI
NMLKJ
ONMLK
PONML
QPONM
RQPON
SRQPO
TSRQP
1 #include <iostream> 2 #include <iostream> 3 #include <stdio.h> 4 #include <string.h> 5 #include <queue> 6 #include <vector> 7 #include <algorithm> 8 #include <math.h> 9 #include <stack> 10 #include <set> 11 12 typedef long long ll; 13 using namespace std; 14 string s="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 15 int i,j,k; 16 int main(){ 17 ios::sync_with_stdio(0); 18 int n,m; 19 cin>>n>>m; 20 if(1<=n&&m<=26){ 21 for(i=1;i<=n;i++){ 22 int ans=0; 23 for(j=i;j>0;j--){ 24 cout<<s[j-1]; 25 ans++; 26 if(ans<m) continue; 27 else break; 28 } 29 for(k=1;k<=m-i;k++){ 30 cout<<s[k]; 31 } 32 cout<<endl; 33 } 34 }else { 35 return 0; 36 } 37 return 0; 38 }
基础练习 数列特征
给出n个数,找出这n个数的最大值,最小值,和。
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
1 3 -2 4 5
-2
11
1 #include <iostream> 2 #include <iostream> 3 #include <stdio.h> 4 #include <string.h> 5 #include <queue> 6 #include <vector> 7 #include <algorithm> 8 #include <math.h> 9 #include <stack> 10 #include <set> 11 #define INF 1000000 12 typedef long long ll; 13 using namespace std; 14 string s="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 15 int i,j,k; 16 int main(){ 17 ios::sync_with_stdio(0); 18 int n; 19 int maxx=-INF,minn=INF,sum=0; 20 cin>>n; 21 for(int i=0;i<n;i++){ 22 int x; 23 cin>>x; 24 if(x>maxx){ 25 maxx=x; 26 } 27 if(x<minn){ 28 minn=x; 29 } 30 sum+=x; 31 } 32 cout<<maxx<<‘\n‘<<minn<<‘\n‘<<sum<<endl; 33 return 0; 34 }
基础练习 查找整数
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
1 9 4 8 3 9
9
1 #include <iostream> 2 #include <iostream> 3 #include <stdio.h> 4 #include <string.h> 5 #include <queue> 6 #include <vector> 7 #include <algorithm> 8 #include <math.h> 9 #include <stack> 10 #include <set> 11 #define INF 1000000 12 typedef long long ll; 13 using namespace std; 14 string s="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 15 const int maxn=1007; 16 int a[maxn]={0}; 17 int main(){ 18 ios::sync_with_stdio(0); 19 int n,m; 20 cin>>n; 21 for(int i=0;i<n;i++){ 22 cin>>a[i]; 23 } 24 cin>>m; 25 int ans=0,i; 26 bool flag=0; 27 for(i=0;i<n;i++){ 28 if(a[i]==m){ 29 ans=i; 30 flag=1; 31 break; 32 } 33 } 34 if(flag) cout<<ans+1<<endl; 35 else cout<<"-1"<<endl; 36 return 0; 37 }
基础练习 杨辉三角形
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
输入包含一个数n。
1 1
1 2 1
1 3 3 1
1 #include <iostream> 2 #include <stdio.h> 3 #include <string> 4 #include <algorithm> 5 #include <queue> 6 #include <vector> 7 #include <set> 8 #include <math.h> 9 #include <stack> 10 11 using namespace std; 12 const int maxn=10000; 13 typedef long long ll; 14 int a[70][70]; 15 16 int main(){ 17 ios::sync_with_stdio(0); 18 int n; 19 cin>>n; 20 int ans=1; 21 a[1][1]=1; 22 cout<<a[1][1]<<endl; 23 for(int i=2;i<=n;++i){ 24 for(int j=1;j<=i;++j){ 25 a[i][j]=a[i-1][j-1]+a[i-1][j]; 26 if(i!=j){ 27 printf("%d ",a[i][j]); 28 }else{ 29 printf("%d\n",a[i][j]); 30 } 31 } 32 } 33 return 0; 34 }
基础练习 特殊回文数
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
989989
998899
1 #include <iostream> 2 #include <stdio.h> 3 #include <string> 4 #include <algorithm> 5 #include <queue> 6 #include <vector> 7 #include <set> 8 #include <math.h> 9 #include <stack> 10 11 using namespace std; 12 const int maxn=10000; 13 typedef long long ll; 14 int a[70][70]; 15 16 int main(){ 17 ios::sync_with_stdio(0); 18 int n; 19 cin>>n; 20 int m=10001; 21 while(m<100000){ 22 int a=m/10000; 23 int b=(m-a*10000)/1000; 24 int c=(m-a*10000-b*1000)/100; 25 int d=(m-a*10000-b*1000-c*100)/10; 26 int e=m%10; 27 if((a+b+c+d+e==n)&&a==e&&b==d){ 28 printf("%d\n",m); 29 } 30 m++; 31 } 32 int k=100001; 33 while(k<1000000){ 34 int a=k/100000; 35 int b=(k-a*100000)/10000; 36 int c=(k-a*100000-b*10000)/1000; 37 int d=(k-a*100000-b*10000-c*1000)/100; 38 int e=(k-a*100000-b*10000-c*1000-d*100)/10; 39 int f=k%10; 40 if(c==d&&b==e&&a==f&&a+b+c+d+e+f==n){ 41 printf("%d\n",k); 42 } 43 k++; 44 } 45 return 0; 46 }
基础练习 特殊的数字
1 #include <iostream> 2 #include <stdio.h> 3 #include <string> 4 #include <algorithm> 5 #include <queue> 6 #include <vector> 7 #include <set> 8 #include <math.h> 9 #include <stack> 10 11 using namespace std; 12 const int maxn=10000; 13 typedef long long ll; 14 int a[70][70]; 15 16 int main(){ 17 ios::sync_with_stdio(0); 18 int n; 19 cin>>n; 20 int ans=1; 21 a[1][1]=1; 22 cout<<a[1][1]<<endl; 23 for(int i=2;i<=n;++i){ 24 for(int j=1;j<=i;++j){ 25 a[i][j]=a[i-1][j-1]+a[i-1][j]; 26 if(i!=j){ 27 printf("%d ",a[i][j]); 28 }else{ 29 printf("%d\n",a[i][j]); 30 } 31 } 32 } 33 return 0; 34 }
给出一个非负整数,将它表示成十六进制的形式。
1 #include <iostream> 2 #include <stdio.h> 3 #include <string> 4 #include <algorithm> 5 #include <queue> 6 #include <vector> 7 #include <set> 8 #include <math.h> 9 #include <stack> 10 11 using namespace std; 12 const int maxn=10000; 13 typedef long long ll; 14 int a[70][70]; 15 16 int main(){ 17 ios::sync_with_stdio(0); 18 int n; 19 cin>>n; 20 //printf("%0x\n",n); 21 printf("%0X\n",n); 22 return 0; 23 }