基础练习 特殊回文数
网址:http://lx.lanqiao.org/problem.page?gpid=T48
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int n;
int x=0;
int a[110];
scanf("%d",&n);
for(int i=0;i<=9;i++) //注意是从0开始,开始从1开始,WR了好多次
for(int j=10;j<=99;j++)
if((j/10+j%10)*2+i==n)
a[x++]=(j*10+i)*100+j%10*10+j/10 ;
for(int i=100;i<=999;i++)
if((i/100+i%100/10+i%10)*2==n)
a[x++]=i*1000+i%10*100+i%100/10*10+i/100 ;
sort(a,a+x);
for(int i=0;i<x;i++)
cout<<a[i]<<endl;
return 0;
}
杨辉三角:http://lx.lanqiao.org/problem.page?gpid=T10
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int a[35][35],n;
memset(a,0,sizeof(a));
a[0][1]=1;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
cout<<a[i][j]<<' ';
}
cout<<endl;
}
return 0;
}
查找整数 网址:http://lx.lanqiao.org/problem.page?gpid=T9
#include <iostream>
#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;
int main(){
int x,n;
scanf("%d",&n);
vector<int> v;//要查找的元素,类型要与vector<>类型一致
for(int i=0;i<n;i++)
{
scanf("%d",&x);
v.push_back(x);
}
scanf("%d",&x);
vector<int>::iterator iter=std::find(v.begin(),v.end(),x);//返回的是一个迭代器指针
if(iter==v.end())
cout<<-1;
else //注意迭代器指针输出元素的方式和distance用法
cout<< distance(v.begin(), iter)+1 ;
return 0;
}
基础练习 字母图形 :http://lx.lanqiao.org/problem.page?gpid=T7
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
string str="";
for(int i=0;i<n;i++)
str+=('A'+i);
cout<<str<<endl;
string temp ;
for(int i=1;i<m;i++)
{
string str1(str,0,n-1); //拷贝部分字符串
temp="";
temp=temp+char('A'+i)+str1;//注意
cout<<temp<<endl;
str=temp;
}
return 0;
}
开始的时候理解错题意了,WR了好几次
基础练习 01字串(这道题挺好的知识点)
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
for(int i=0;i<32;i++){
char s[10];
itoa(i, s, 2); //转换成字符串,进制基数为2,i转化为 注意是整型和字符数组之间的转化
string str(s); //转化为string类型
int number = atoi(str.c_str());
printf("%05d\n",number); //输出控制格式0代表空位补零,5代表限制为5位,如果小于五位,通过补零形式满足,超过五位则失去作用
}
return 0;
}
另解:开始的时候不知道字符串也能填充(填充其他字符现在还不清楚,但是填充0为如下)
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
for(int i=0;i<32;i++){
char s[10];
itoa(i, s, 2); //转换成字符串,进制基数为2,i转化为 注意是整型和字符数组之间的转化
printf("%05s\n",s);
}
return 0;
}
算法训练 Anagrams问题 (大小写转化)
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
char ch1[100],ch2[100];
cin>>ch1>>ch2;
int x;
if((x=strlen(ch1))!=strlen(ch2))
cout<<"N";
strlwr(ch1);//将大写转化为小写 网址:http://blog.csdn.net/u014665013/article/details/37994597
strlwr(ch2);
int a[30]={0},b[30]={0};
for(int i=0;i<x;i++)
{
a[ch1[i]-'a']++;
b[ch2[i]-'a']++;
}
int mark=1;
for(int i=0;i<26;i++)
if(a[i]!=b[i])
{
cout<<"N";
mark=0;
break;
}
if(mark)
cout<<"Y";
return 0;
}
算法训练 出现次数最多的整数
(我也是醉了,好像还有n=0这样的测试数据,这还WR,好好读题)
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a,b,mark,count=1,temp=1;
int x=n;
if(x>0)
cin>>a;
n--;
mark=a;
while((n--)>0){
cin>>b;
if(a==b){
temp++;
if(temp>count)
{
mark=b;
count=temp;
}
}
else
temp=1;
a=b;
}
if(x>0)
cout<<mark;
return 0;
}
算法训练 字串统计 (含字符串的部分截取)
网址:http://lx.lanqiao.org/problem.page?gpid=T219
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
string str,mark="";
cin>>str;
string temp[65];
int len=str.length(),markcishu=0,tempcishu;
for(int i=n;i<=len;i++)
{
int j=0;
for(j=0;j+i<=len;j++)//截取字串 j为起始位置,
{
temp[j] = str.substr(j,i);
// cout<<"temp["<<j<<"]="<<temp[j]<<endl;
}
for(int x=0;x<j&&temp[x]!="";x++)//查找长度为i的最多的串
{
tempcishu=1;
for(int w=x;w<j;w++)
if(temp[x]==temp[w]) {
tempcishu++;
temp[x]=="";
}
if(tempcishu>markcishu||(temp[x].length()>mark.length()&&tempcishu==markcishu)){//注意条件
markcishu=tempcishu;
mark=temp[x];
}
}
}
cout<<mark;
return 0;
}
算法训练 矩阵乘法
网址:http://lx.lanqiao.org/problem.page?gpid=T218
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int n,m,s;
cin>>m>>s>>n;
int a[205][205], b[205][205],temp=0;
for(int i=1;i<=m;i++)
for(int j=1;j<=s;j++)
scanf("%d",&a[i][j]);
for(int i=1;i<=s;i++)
for(int j=1;j<=n;j++)
scanf("%d",&b[i][j]);
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
for(int x=1;x<=s;x++)
temp=temp+a[i][x]*b[x][j];
printf("%d ",temp);
temp=0;
}
printf("\n");
}
return 0;
}
算法训练 大小写转换 网址:http://lx.lanqiao.org/problem.page?gpid=T216
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
string str;
//cout<<char(32+'A');//<<' '<<'b'-'B'<<endl;
cin>>str;
int len = str.length();
for(int i=0;i<len;i++){
if(str[i]<='Z'&&str[i]>='A')
str[i]=char(str[i]+32);
else
str[i]=str[i]-32;
}
cout<<str;
return 0;
}
算法训练 动态数组使用 网址:http://lx.lanqiao.org/problem.page?gpid=T205
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int n,sum=0;
scanf("%d",&n);
int * array=(int*)calloc(n,sizeof(int));
for(int i=0;i<n;i++)
{
cin>>array[i];
sum=sum+array[i];
}
cout<<sum<<' '<<sum/n;
return 0;
}
算法训练 最小乘积(基本型) 网址:http://lx.lanqiao.org/problem.page?gpid=T133
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++) {
int x,sum=0;
scanf("%d",&x);
int a[1005],b[1005];
//int * a=(int*)calloc(n,sizeof(int));
//int * b=(int*)calloc(n,sizeof(int));
for(int j=0;j<x;j++)
cin>>a[j];
for(int j=0;j<x;j++)
cin>>b[j];
sort(a,a+x);
sort(b,b+x,cmp);
for(int j=0;j<x;j++)
sum+=(a[j]*b[j]);
printf("%d\n",sum);
}
return 0;
}
算法训练 Torry的困惑(基本型) 网址:http://lx.lanqiao.org/problem.page?gpid=T129
//前n项素数求积对50000取模
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
#define N 1300000
bool isprm[N];
void isprime()
{
int i,j,k=0;
int s,e=sqrt( double(N) )+1; //sqrt是对于double数开平方
memset(isprm,1,sizeof(isprm));
//prm[k++]=2;
isprm[0] = isprm[1] = 0;
for(i=4 ;i < N; i=2+i)
isprm[i]=0;
for(i=3;i<e;i=2+i)
if(isprm[i])
for(s=i*2,j=i*i;j<N;j=j+s)
isprm[j]=0; //因为j是奇数,所以+奇数后是偶数,不必处理
}
int main()
{
int n,sum=1;
cin>>n;
isprime();
int j=0;
for(int i=0;j<n;i++)
if(isprm[i]==true){
sum=sum*i%50000;
j++;
}
cout<<sum;
return 0;
}
算法训练 关联矩阵 网址:http://lx.lanqiao.org/problem.page?gpid=T110
//前n项素数求积对50000取模
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main (){
int m,n,a[105][1005]={0};
cin>>m>>n;
int x,y;
for(int i=1;i<=n;i++){
scanf("%d%d",&x,&y);
a[y][i]=-1;
a[x][i]=1;
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
return 0;
}
算法训练 区间k大数查询
网址:http://lx.lanqiao.org/problem.page?gpid=T11
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int n,a[1005],x,temp[1005],l,r,k;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
scanf("%d",&x);
for(int i=1;i<=x;i++){
int count=0;
scanf("%d%d%d",&l,&r,&k);
for(int j=l;j<=r;j++)
{
temp[count++]=a[j];
// cout<<a[j]<<' ';
;
}
sort(temp,temp+count);
//cout<<endl<<count<<temp[0]<<' '<<temp[1]<<' '<<temp[2]<<' '<<temp[3]<<' '<<temp[4]<<endl;
cout<<temp[count-k]<<endl;
}
return 0;
}
算法提高 6-17复数四则运算(写这样简单但是需要先总结对公式)
网址 :http://lx.lanqiao.org/problem.page?gpid=T255
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
double x1,x2,y1,y2,y3,x3;
char ch;
cin>>x1>>y1>>ch>>x2>>y2;
if(ch=='+')
x3=x1+x2,y3=y1+y2;
else if(ch=='-')
x3=x1-x2,y3=y1-y2;
else if(ch=='*')
x3=x1*x2-y1*y2,y3=x1*y2+y1*x2;
else
if(ch=='/')
if(x2*x2+y2*y2==0)
{
cout<<"error";
return 0;
}
else
x3=(x1*x2+y1*y2)/(x2*x2+y2*y2),y3=(y1*x2-x1*y2)/(x2*x2+y2*y2);
else
{
cout<<"error";
return 0;
}
if(x3==0&&y3==0){
cout<<0;
return 0;
}
if(x3!=0)
cout<<x3;
if(y3>0)
cout<<'+'<<y3<<'i';
else if(y3<0)
cout<<y3<<'i';
//cout<<endl<<x2*x2+y2*y2<<' '<<(y1*x2-x1*y2);
return 0;
}
算法提高 约数个数(不是完全循环,还是有点小技巧的)
网址:http://lx.lanqiao.org/problem.page?gpid=T209
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int count=0;
for(int i=1;i<=sqrt(double(n));i++){
if(n%i==0)
count++;
}
if(sqrt(double(n))-int(sqrt(double(n)))==0)
cout<<2*count-1;
else
cout<<2*count;
return 0;
}
历届试题 分糖果 网址: http://lx.lanqiao.org/problem.page?gpid=T124
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main (){
int n,a[105],b[105];
cin>>n;
for(int i=0;i<n;i++){
scanf("%d",&a[i]) ;
}
int count = 0;
char mark = 'b';
int x=3;
while(1){
if(mark=='a')
{
int temp=b[0],i;
for(i=1;i<n;i++ )
if(b[i]!=temp){
break;
}
if(i==n)
break;
a[0]=(b[n-1]+b[0])/2;
if(a[0]%2==1){
a[0]++;
count++;
}
for(i=1;i<n;i++){
a[i]=(b[i-1]+b[i])/2;
if(a[i]%2==1){
a[i]++;
count++;
}
}
mark='b';
}
else{
int temp=a[0],i;
for(i=1;i<n;i++ )
if(a[i]!=temp){
break;
}
if(i==n)
break;
b[0]=(a[n-1]+a[0])/2;
if(b[0]%2==1){
b[0]++;
count++;
}
for(i=1;i<n;i++){
b[i]=(a[i-1]+a[i])/2;
if(b[i]%2==1){
b[i]++;
count++;
}
}
mark='a';
}
}
cout<<count;
return 0;
}
历届试题 兰顿蚂蚁 网址:http://lx.lanqiao.org/problem.page?gpid=T125
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main (){
int n,m;
bool a[105][105];
cin>>m>>n;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
scanf("%d",&a[i][j]) ;
int row,list,find;
scanf("%d%d",&row,&list) ;
char ch;
cin>>ch>>find;
for(int i=1;i<=find;i++){
if(a[row][list]==1){
a[row][list]=0;
if(ch=='U'){ ch='R'; list++;}
else if(ch=='R'){ ch='D'; row++; }
else if(ch=='D'){ ch='L';list-- ;}
else { ch='U';row--;}
}
else{
a[row][list]=1;
if(ch=='U'){ ch='L';list-- ;}
else if(ch=='R'){ ch='U';row--;}
else if(ch=='D'){ ch='R'; list++;}
else { ch='D'; row++; }
}
}
cout<<row<<' '<<list;
return 0;
}
浙公网安备 33010602011771号