1、求最小公倍数
最小公倍数=A*B/最大公约数
#include<iostream>
#include<string>
using namespace std;
int main(){
int A,B;
cin>>A>>B;
int min;//A、B中的小者
int common;//公倍数
int commonD=1;//最大公约数
if(A<B){
min = A;
}else{
min = B;
}
int i;
if(min==1){
common = A*B;
}
else{
for(i=2;i<=min;i++){
if(A%i==0 && B%i==0){
commonD = i;
}
}
common = A*B/commonD;
}
cout<<common;
return 0;
}
2、字符串反转:
使用gets记得包含头文件,即#include
开始使用string,运行错误
后来使用char(数组大小为100000),用gets读取,就正确了
3、汽水瓶:
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int n;
int count=0;
void fun(){
if(n==2){ //n是空瓶子数
count+=1; //喝的饮料数量
n=0;
}else{
count+=(n/3);
n=(n/3)+(n%3);
}
}
int main(){
int num[11];
int i;
for(i=0;i<11;i++){
cin>>num[i];
if(num[i]==0) break;
}
for(i=0;;i++){
if(num[i]==0){
break;
}
n=num[i];
if(n==1) count=0;
else{
while(n>=2){
fun();
}
}
cout<<count<<endl;
count=0;
}
return 0;
}
4、字符串排序:
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int main(){
char a[26][100]; //存放按顺序输入的26个字母
int count[26]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //26个字母的数量
char str[1000]; //输入的字符串
gets(str);
int i;
//a、count初始化
for(i=0;str[i]!='\0';i++){
if(str[i]>='A' && str[i]<='Z'){
a[str[i]-'A'][count[str[i]-'A']++]=str[i];
}else if(str[i]>='a' && str[i]<='z'){
a[str[i]-'a'][count[str[i]-'a']++]=str[i];
}
}
//a[][]中的内容按顺序放在strOut中
int num=0;
int j;
char strOut[1000];
for(i=0;i<26;i++)
for(j=0;j<count[i];j++){
//cout<<a[i][count[i]]<<"!";
strOut[num++] = a[i][j]; //注意下面要用a[i][j] 而不是 a[i][count[i]]
}
//输出
num=0;
for(i=0;str[i]!='\0';i++){
if((str[i]>='A' && str[i]<='Z')||(str[i]>='a' && str[i]<='z')){
cout<<strOut[num++];
}else{
cout<<str[i];
}
}
return 0;
}
注意:
要用a[i][j] 而不是 a[i][count[i]]
a[str[i]-‘A’][count[str[i]-‘A’]++]=str[i];而不是a[str[i]-65][count[str[i]-65]++]=str[i];
5、密码强度计算
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int main(){
string str;
cin>>str;
int score=0;
int charCount=0,numCount=0,symbolCount=0,charBigCount=0;
//长度评分
if(str.size()>=8){
score+=25;
}else if(str.size()>=5 && str.size()<=7){
score+=10;
}else if(str.size()<=4){
score+=5;
}
int i;
for(i=0;i<str.size();i++){
if(str[i]>='A' && str[i]<='Z'){
charBigCount++;
}else if(str[i]>='a' && str[i]<='z'){
charCount++;
}else if(str[i]>='0' && str[i]<='9'){
numCount++;
}else if((str[i]>=0x21 && str[i]<=0x2F)||(str[i]>=0x3A && str[i]<=0x40)||
(str[i]>=0x5B && str[i]<=0x60)||(str[i]>=0x7B && str[i]<=0x7E)){
symbolCount++;
}
}
//字母加分
if(charCount>0 && charBigCount>0){
score+=20;
}else if(charCount==0 && charBigCount==0){
}else if((charCount>0 && charBigCount==0)||(charCount==0 && charBigCount>0)){
score+=10;
}
//数字数量加分
if(numCount==1){
score+=10;
}else if(numCount>1){
score+=20;
}else if(numCount==0){
}
//符号数量加分
if(symbolCount==1){
score+=10;
}else if(symbolCount>1){
score+=20;
}else if(symbolCount==0){
}
if((charCount+charBigCount)>0 && numCount>0 && symbolCount==0){
score+=2;
}else if((charCount>0 && charBigCount==0 && numCount>0 && symbolCount>0)
||(charCount==0 && charBigCount>0 && numCount>0 && symbolCount>0)){
score+=3;
}else if(charCount>0 && charBigCount>0 && numCount>0 && symbolCount>0){
score+=5;
}
string judge;
if(score >=0 && score<25){
judge="VERY_WEAK";
}else if(score >=25 && score<50){
judge="WEAK";
}else if(score >=50 && score<60){
judge="AVERAGE";
}else if(score >=60 && score<70){
judge="STRONG";
}else if(score >=70 && score<80){
judge="VERY_STRONG";
}else if(score >=80 && score<90){
judge="SECURE";
}else if(score >=90 && score<=100){
judge="VERY_SECURE";
}
cout<<judge;
return 0;
}
6、删除出现次数最少的字符串
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int main(){
string str;
cin>>str;
int count[26]={0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int i,j;
if(str.size()<=20){
for(i=0;i<str.size();i++){
count[str[i]-'a']++;
}
int min; //存放字符出现最小的次数
bool symbol=true;
//找到min
for(i=0;i<26;i++)
{
if(symbol){
if(count[i]>0){
min=count[i]; //只执行一次
symbol=false;
}
}
if(count[i]<min && count[i]>0){
min = count[i];
}
}
//找到出现次数最少的字符们
char strMin[26]; //存放出现字数最少的字符们
int minNum=0;//出现字数最少的字符数量
for(i=0;i<26;i++)
{
if(count[i]==min){
strMin[minNum++] = (char)(i+'a');
}
}
char strOut[1000];
int strOutNum=0;
bool sign=true;
for(i=0;i<str.size();i++){
for(j=0;j<minNum;j++){
if(str[i]==strMin[j]){
sign=false;//要删除掉这个字符
break;
}
}
if(sign){
strOut[strOutNum++]=str[i];
}
sign=true;
}
strOut[strOutNum]='\0';//注意赋值要加结束符号,用cin输入则不需要加
cout<<strOut;
}
return 0;
}
7、小球落地5次后
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int main(){
int height;
cin>>height;
double road,heighting ;
road = height*2.875;
heighting = height*0.5*0.5*0.5*0.5*0.5;
cout<<road<<endl<<heighting<<endl;
return 0;
}
8、数字逆序
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int main(){
long num;
cin>>num;
int number[100],count=0; //记录数的每一位,以及位数
int i;
for(i=0;num!=0;i++){
number[count++]=num%10;
num/=10;
}
for(i=0;i<count;i++){
cout<<number[i];
}
return 0;
}
9、递推公式
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int a=2;
void fun(){
a=a*2+2;
}
int main(){
int n,i;
cin>>n;
if(n==1){
cout<<2;
}else if(n>=2 && n<65535){
for(i=0;i<n-1;i++){
fun();
}
cout<<a;
}
return 0;
}
10、FBI树(闯关的题目)
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
class Node{
public:
Node(){ //构函数造
left = -1;
right = -1;
sign0 = false;
sign1 = false;
}
char symbol; //属于什么串
char content[1024]; //存储01串
int length; //01串的长度
bool sign0;//字符串里是否有0
bool sign1;//字符串里是否有1
int left; //左孩子在Node[]数组对象中的第几个
//定义的时候不能直接赋值
int right; //右孩子在Node[]数组对象中的第几个
};
Node *node = new Node[1000];//创建可以存放一千个节点的对象
int count=0;//存放节点的个数
char outStr[1000];
int outCount=0;
int n;
void find(Node nd){
if(nd.left!=-1){ //如果下面还有子节点
find(node[nd.left]);
find(node[nd.right]);
}
outStr[outCount++] = nd.symbol;
}
int fun(char str[],int len){
int maxJudge=1;
int i;
for(i=0;i<n+1;i++){
maxJudge*=2;
}
//node01串、01串长度初始化
for(i=0;i<len;i++){
node[count].content[i] = str[i];
}
node[count].length = len;
//是否含0、1
for(i=0;i<len;i++){
if(str[i]=='0'){
node[count].sign0 = true;
}else if(str[i]=='1'){
node[count].sign1 = true;
}
}
//判断属于什么串
if(node[count].sign0 == true && node[count].sign1 == true){
node[count].symbol = 'F';
}else if(node[count].sign0 == true && node[count].sign1 == false){
node[count].symbol = 'B';
}else if(node[count].sign0 == false && node[count].sign1 == true){
node[count].symbol = 'I';
}
if(len==1){//叶子节点
if(count==(maxJudge-2)){
return 0;
}
}else{
//定义左右孩子的01串
char leftStr[len/2];
char rightStr[len/2];
//给左孩子01串赋值
for(i=0;i<len/2;i++){
leftStr[i] = str[i];
}
//给右孩子01串赋值
for(i=len/2;i<len;i++){
rightStr[i-(len/2)] = str[i];
}
//记住左孩子
int temp=count; //暂存父串标号
node[temp].left = ++count;
fun(leftStr,len/2);
node[temp].right = ++count;
fun(rightStr,len/2);
}
}
int main(){
char str[1024]; //存放01串
cin>>n>>str;
int k,len=1;
//找到输入的长度
for(k=0;k<n;k++){
len*=2;
}
cout<<"初始长度:"<<len<<endl;
//调用fun
fun(str,len);
//调用find
find(node[0]);
//输出
for(k=0;k<outCount;k++)
cout<<outStr[k];
return 0;
}