1质因数(循环)
#include <iostream> using namespace std; int main() { int n; cin>>n; cout<<n<<"=";//输入完成直接输出整数 for(int i=2;i<=n;i++){ while(i!=n){ if(n%i==0){ cout<<i<<"*"; n=n/i; } else break; } } cout<<n; return 0; }
2谁是老二?(一维数组)
#include <iostream> using namespace std; void sort(int a[],int n){ for(int i=0;i<n-1;i++){ int end=i; int temp=a[end+1]; while(end>=0){ if(temp>a[end]){ a[end+1]=a[end]; end--; } else break; } a[end+1]=temp; } } int main() { int n; int a[100],b[100]; int i; int k; while(scanf("%d",&n)!=EOF){ for(i=0;i<n;i++){ cin>>a[i]; b[i]=a[i]; } sort(a,n); int max=0; for(i=0;i<n;i++){ if(a[i]!=a[max]){ k=a[i]; cout<<k<<" "; break;//找到第二大的数直接退出 } } if(i>=n){ cout<<"none"; } else{ for(i=0;i<n;i++){ if(b[i]==k) cout<<i<<" ";//在原数组中输出下标 } } cout<<"\n"; } return 0; }
3骑士斗恶龙(一维数组)
#include <iostream> using namespace std; void sort(int a[],int n){ for(int i=0;i<n-1;i++){ int end=i; int temp=a[end+1]; while(end>=0){ if(temp<a[end]){ a[end+1]=a[end]; end--; } else break; } a[end+1]=temp; } } int main() { int a[1000];//龙头 int b[1000];//骑士 int n,m; // cin>>n; //cin>>m; while(scanf("%d %d",&n,&m)!=EOF){ int i,j; int sum; for(i=0;i<n;i++) cin>>a[i]; for(i=0;i<m;i++) cin>>b[i]; if(n>m){ cout<<"Lose!\n"; } else{ sort(a,n); sort(b,m);//将龙头直径,骑士能力从小到大排序 sum=0;//计算能量 j=0; for(i=0;i<n&&j<m;i++){ if(a[i]>b[j]){ while(a[i]>b[j]) j++; } sum=sum+b[j]; j++; } if(i==n&&j<=m) cout<<sum; else cout<<"Lose!\n"; } cout<<"\n"; } return 0; }
4蛇形方阵(二维数组)
#include<iostream> #include<stdio.h> #include<cstring> using namespace std; const int maxn = 20; int a[maxn][maxn]; int main() { int n; cin >> n; int x=0, y=0; int flag=1; //memset(a, 0, sizeof(a)); int j=1;//计数 for(int i=1;i<=n*n;i++){ a[x][y]=i; if(flag==1){ if(j%n!=0){ y++; j++; } else{ x++; flag=0; j=1; } } else{ if(j%n!=0){ y--; j++; } else{ x++; flag=1; j=1; } } } for (x = 0; x<n; x++) { for (y = 0; y<n; y++) printf("%4d", a[x][y]); cout << endl; } return 0; }
5单词统计(字符串)
#include<iostream> #include<stdlib.h> #include<cstring> #include<cstdio> using namespace std; int main(){ int n,i,len,count ; char a[51]; cin>>n; getchar(); while(n--){ gets(a); len=strlen(a); count=0; for(i=0;i<len;i++){ if(a[i]!=' '&&a[i+1]==' ' ) count++; } if(a[len-1]!=' ') count++; cout<<count; if(n!=0) cout<<endl; } return 0; }
6转换成十进制(字符串)
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; int main(){ string str; int m,n,i; while(cin>>n>>str){ int len=str.length(); int sum=0,k=0; for(i=len-1;i>=0;i--,k++){ if(str[i]>='A'&&str[i]<='J') sum=sum+pow(n,k)*(str[i]-55);//‘A’为65,‘a’为97 else{ sum=sum+pow(n,k)*(str[i]-'0');//如果是数字字符则转化成整数类型 } } cout<<sum<<endl; } return 0; }
7十进制转换成其它进制(字符串)
#include<iostream> #include<cstring> using namespace std; void change( int n,int m ) { int x; if(n) { change(n/m,m);//递归处理 x=n%m; if( x <= 9 ) cout<<x; else cout<<char(x - 10 + 'A'); } } int main(){ int n,m; while(cin>>n>>m){ change(n,m); cout<<endl; } return 0; }
8最大相同子串(字符串)
#include<stdio.h> #include<cstring> #include<iostream> #include<string.h> using namespace std; #define max 1000 //返回str中从start位置开始的len个字符 void getsub(string str,int start,int len,char subs[]){ int i,j=0; for(i=start;i<start+len;i++) subs[j++]=str[i]; subs[j]='\0'; //将得到的相同子串存入subs[]字符串 } int main(){ int i,j,k; string a,b; //存储输入的两个字符串 char c[max],sub[max]={0};//c while(cin>>a){ memset(sub,0,sizeof(sub)); cin>>b; for(i=0;i<a.length();i++){ for(j=0;j<b.length();){ while(a[i]!=b[j]&&b[j]!='\0') j++; if(b[j]=='\0') break; else{ k=0; while(a[i+k]==b[j+k]&&a[i+k]!='\0'&&b[j+k]!='\0') k++; getsub(b,j,k,c); //subs[]存储上次的最长子串,c[]用来存储此次传回来的最长子串 //下面while循环用来比较 if(strlen(c)>strlen(sub)||(strlen(c)==strlen(sub)&&strcmp(c,sub)<0)) //strcmp(c,sub)<0表示c的小于sub strcpy(sub,c); //如果c[]比sub[]小,则将c赋值给sub j++;//j继续向后找看是否有更长的子串 } } } puts(sub); //memset(a,0,sizeof(a)); } return 0; }
9冰雹数(循环)
#include<iostream> #include<cstring> using namespace std; int ice_max(int x) { int max=0; while(x!=1) { if(x % 2 == 0) { x=x/2;//当x为偶数时 if(x > max ) max=x; //可以不比较,因为这里除以2之后必定比前面小 } else { x=x*3+1; if(x > max ) max=x; } } return max; } int main() { int m,n,i; cin>>n; int max=0; for(i=2;i<=n;i++) { if(ice_max(i) > max) max=ice_max(i); } cout<<max<<endl; return 0; }
10小数第n位(循环)
#include<iostream> using namespace std; int main(){ int a,b,n,i; while(cin>>a>>b>>n){ while(a>b){ a%=b; } //先把整数部分搞掉; i=0; while(i<=n+2){ a*=10;//补0来做除法 i++; if(i>=n && i<=n+2) //从n开始的后三位才输出; { cout<<a/b; } a=a%b; //模拟小数除 } cout<<endl; } return 0; }