11丑数(枚举)
12笨小猴(字符串)
#include <iostream> #include <cstring> #include <cstdio> using namespace std; //素数判断函数 是返回1 不是返回0 int is_zhishu(int x) { for(int i=2;i<=x/2;i++) if(x%i==0) return 0; return 1; } int main() { char a[101],b[26]={};//b数组初始化为0 cin>>a; int len=strlen(a); //输入单词长度 for(int i=0;i<len;i++) //遍历 { b[a[i]-95]++; //a对应0 z对应25 对应位置++ ,将字母转换成整数类型‘a’对应acsii码95 } int max=-1,min=101; //初始化最大最小值 for(int i=0;i<26;i++)//遍历b数组 { if(b[i]>max) max=b[i]; //最大值 if(b[i]!=0 &&b[i]<min) min=b[i];//0除外的最小值 } if( is_zhishu(max-min) &&(max-min)>1 ) //0跟1不是素数 也要输出 No Answer cout<<"Lucky Word"<<endl<<max-min; else cout<<"No Answer"<<endl<<"0"; }
13子串统计(字符串)
#include <cstdio> #include <iostream> #include <cstring> #include <string> #include <algorithm> using namespace std; int main() { int L,maxn,cnt; string s,s1,s2,ans; int len; while(scanf("%d",&L)!=EOF) { cin>>s;//输入字符串S len=s.length(); //字符长度len maxn=cnt=0;// for(int i=L;i<=len;i++) //开展暴力循环 ,依次统计长度为L,L+1,L+2到len的子串 { for(int j=0;j+i<=len;j++)//每次增加一个字符 { cnt=0; //统计字符串出现次数,每次置零 s1=s.substr(j,i); //字符串截取函数,两个参数,截取str里面从j开始之后的字符长度为i的字符串 for(int k=0;k+i<=len;k++) { s2=s.substr(k,i);//每次往后走一个 if(s1==s2) { cnt++; } }//此循环统计长度为i的字符串出现次数 if(cnt>maxn) //更新出现最多的次数和对应的子串 { ans=s1; maxn=cnt; } else if(cnt==maxn&&s1.length()>ans.length()) //出现次数相同,ans取长度最长的 { ans=s1; } //该程序取子串是从头开始的,因此当出现次数相同时,而且长度也相同,保存的就是第一次出现的字串 } } cout<<ans<<endl; //ans 是出现次数最多的子串,maxn 是该子串出现的次数 } return 0; }
14Anagrams问题(字符串)
#include<bits/stdc++.h> using namespace std; int a[26],b[26]; //两个数组对应记录每个字符串字母出现的频次 int main() { string s1,s2;//存储两个字符串 int i; cin >> s1 >> s2; if (s1.length() != s2.length()){ cout << "N"; return 0; }//两个字符串长度不同时,必然不是 int len = s1.length(); //当两个字符串长度相同时 for (i = 0; i < len; i ++) { if(s1[i] <= 90 && s1[i] >= 65) {//判断大小写 a[s1[i] - 65] ++; //当字符为大写时‘A’-‘Z’-->65--90 } else{ a[s1[i] - 97] ++;//当字符为小写时'a'--97 } if(s2[i] <= 90 && s2[i] >= 65) { b[s2[i] - 65] ++; } else{ b[s2[i] - 97] ++; } } bool flag = true; for (i = 0; i < 26; i ++) { if (a[i] != b[i]){ flag = false; break; } else continue; } if (flag == true) { cout << "Y"; } else{ cout << "N"; } return 0; } */ //15身份证号码升级(字符串) /* #include<string> #include<stdio.h> #include<iostream> using namespace std; int alpha[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; //对应系数表 char code[] = { '1','0', 'x','9', '8', '7', '6', '5', '4', '3', '2' }; //取余之后的对应表格 string str; //int ctoi(char c) //{ // return c - '0'; //}//将字符字母转化成整数类型 int main() { cin >> str; int sum = 0; for (int i = 0;i < 6;++i) { sum += ((str[i]-'0')*alpha[i]) % 11; //在每次循环时就开始取余 printf("%c", str[i]); } //第七第八个数直接输出19 sum += (alpha[6] + 9 * alpha[7]) % 11; printf("19"); //原数组继续做处理 for (int i = 6;i<15;++i) { sum += ((str[i]-'0') * alpha[i + 2]) % 11; printf("%c", str[i]); } printf("%c\n", code[sum % 11]);//输出最后一个数 return 0; }
16彩票(数组)
#include <iostream> using namespace std; int book[100],n,prize[8]; //book里放所有的号码 prize里放(0-6)等奖的个数 int main() { cin>>n; int i,j,t,count1; for(i=1;i<=7;i++) { //循环输入获奖的号码,在对应位置上标志为1 cin>>t; book[t]=1; //如果这个数是中奖号码 则标志为1 } for(i=1;i<=n;i++) //循环n张彩票 { count1=0; for(j=1;j<=7;j++)//输入每次的7个号码 { cin>>t; if(book[t]) //如果这个数是中奖号码 count1++; //中奖号码数+1 } //一张彩票判断完成之后在对应奖项处加一 prize[7-count1]++; //对应的几等奖+1 } for(i=0;i<7;i++)//循环输出每个奖项的获奖情况 printf("%d ",prize[i]); return 0; }
17质数的后代(数组)
#include<iostream> #include<cmath> using namespace std; bool justss(int x) //判断素数 { for (int i = 2; i <= sqrt(x); i++) if (x % i == 0) return false; return true; } bool justhd(int x) //判断质数的后代 { int j; for (int i = 2; i <= sqrt(x); i++) { if (justss(i) == true) { if (x%i == 0) { j = x / i; //i,j为这个数的两个因子 if (justss(j) == true) return true; } } } return false; } int main() { int n,x; cin >> n; for (int i = 0; i < n; i++) { cin >> x; if (justhd(x) == true) cout << "Yes" << endl; else cout << "No" << endl; } return 0; }
18高精度乘法(数组)
#include <iostream> #include <cstring> using namespace std; #define max 1000000 char a[max],b[max]; int A[max],B[max],C[2*max],temp,lena,lenb,lenc; bool flag1=true,flag2=true; int main(){ cin>>a; cin>>b; lena=strlen(a); lenb=strlen(b); lenc=lena+lenb; for(int i=0;i<lena;++i) A[i]=a[lena-1-i]-'0'; //倒置存储 for(int i=0;i<lenb;++i) B[i]=b[lenb-1-i]-'0'; for(int i=0;i<lena;++i) { temp=0; for(int j=0;j<lenb;++j) { C[i+j]=A[i]*B[j]+temp+C[i+j]; temp=C[i+j]/10; C[i+j]%=10; } C[i+lenb]=temp; } for(int i=lenc-1;i>=0;--i) { if(C[i]==0&&lenc>1) { lenc--; } else { break; } } for (int i=lenc-1; i>=0; i--) { cout<<C[i]; } return 0; }
19阶乘末尾(数组)
#include <iostream> using namespace std; #define MAX_N 61 int main() { int a[MAX_N] = {1};//初始化a[0]为1 int n,len,i; cin>>n>>len; for(;n>1;--n) { for(i=0;i<MAX_N;++i) { a[i] *= n; }//求阶乘 for(i=0;i<MAX_N-1;++i) { //相当于逆置放入了数组 a[i+1] += (a[i]/10); //发生进位时,放进a数组的下一位,相当于逆置了 a[i] = a[i]%10; //将余数放入a[i]里 } } for(i=len-1;i>=0;--i) { cout<<a[i]; } return 0; }
20寂寞的数(数组)
#include<cstdio> using namespace std; #define MAXN 10010 int alone[MAXN]; int main() { int N; int k; int sum; scanf("%d", &N); for(int i = 1; i <= N; ++i) { k = i; sum = i; while(k)//求该数各个位的和 { sum += k % 10; k /= 10; } alone[sum] = 1; //如果N以内的某个数不是寂寞数,则标记为1 } for(int i = 1; i < N; ++i){ if(alone[i] == 0) printf("%d\n", i); } return 0; }