打印倒三角
#include <bits/stdc++.h> using namespace std; char c; void print(int times){ char start = c - times; for(int i=0;i<=times;i++){ for(int j=0;j<2*i;j++) cout<<" "; char a; for(a=start;a<=c-i;a++){ if(a!=start) cout<<" "; cout<<a; } a-=2; for(;a>=start;a--){ cout<<" "<<a; } cout<<endl; } } int main(){ cin>>c; char start; int times; if(c >= 'a'&&c <= 'z') times = c - 'a'; else times = c - 'A'; print(times); return 0; }
编写程序,接受 3 个以 N/D 形式输入的分数,其中 N(0<=N<=65535)为分子,D
(0<=D<=65535)为分母,输出他们的小数形式。如果小数存在循环节,则用括号括起来,如
1/3=.33333…表示为 0.(3)。
#include <bits/stdc++.h> using namespace std; #define maxtimes 1000 int res[maxtimes]={0}; void divide(int m,int n){ cout<<m<<"/"<<n<<":"; //处理小数点前的部分 int a=m/n,b=m%n; if(a!=0) cout<<a; cout<<"."; bool flag=true; int i=0; while(i<maxtimes){ b*=10; a=b/n; b=b%n; res[i++]=a; if(a==0){ flag=false; break; } } //cout<<flag<<endl; if(!flag){ for(int j=0;j<i;j++){ cout<<res[j]; } } else{ for(int j=0;j<maxtimes;j++){//三层循环暴力 bool success; for(int k=j+1;k<maxtimes;k++){ if(res[j]==res[k]){ success=true; int p=j+1,q=k+1; for(;p<k;p++,q++){ if(res[p]!=res[q]){ success=false; break; } } if(success){ for(int l=0;l<j;l++) cout<<res[l]; cout<<"("; for(int l=j;l<k;l++){ cout<<res[l]; } cout<<")"<<endl; return ; } } } } } } int main(){ int N,D; for(int i=0;i<3;i++){ scanf("%d/%d",&N,&D); divide(N,D); } return 0; }
十二进制数
#include <bits/stdc++.h> using namespace std; char twelve[9]; int main(){ scanf("%s",&twelve); int len = strlen(twelve); int sum = 0; for(int i = 0;i < len ;i++){ char c=twelve[i]; int num=0; if(c >= '0' && c <= '9'){ num=c-'0'; } else if(c == 'a') num=10; else num=11; cout<<num<<" "; sum = sum * 12 + num; } cout<<endl<<sum<<endl; char binary[4][9]={'\0'}; for(int i=0;i<4;i++){ for(int j=7;j>=0;j--){ int temp=sum&1; binary[i][j]='0' + temp; //printf("%c",binary[i][j]); sum>>=1; } } for(int i=3;i>=0;i--){ printf("%s ",binary[i]); } return 0; }
统计字母个数 单词个数 输出最多次数的单词(不分大小写)
#include <bits/stdc++.h> using namespace std; string str; int cnt[27]={0};//统计字符出现的次数 int main(){ getline(cin,str); int letter_cnt=0,word_cnt=0; int maxcnt=-1,maxnum=0; bool flag=true; for(int i=0;i<str.size();i++){ char c=str[i]; if(c!=' '){ letter_cnt++; if(c>='a'&&c<='z'){ cnt[c-'a']++; if(cnt[c-'a']>maxcnt){ maxcnt=cnt[c-'a']; maxnum=1; } else if(cnt[c-'a']==maxcnt) maxnum++; } else{ cnt[c-'A']++; if(cnt[c-'a']>maxcnt){ maxcnt=cnt[c-'A']; maxnum=1; } else if(cnt[c-'A']==maxcnt) maxnum++; } if(flag){ word_cnt++; flag=false; } } if(c==' '){ if(!flag){ flag=true; } } } cout<<"字母个数:"<<letter_cnt<<endl; cout<<"单词个数:"<<word_cnt<<endl; cout<<"最多的字母:"; int j=0; for(int i=0;i<26;i++){ if(cnt[i]==maxcnt){ printf("%c",i+'a'); j++; if(j!=maxnum) cout<<","; } } cout<<endl<<"出现的次数:"<<maxcnt<<endl; return 0; }
输入一个字符串 长度小于80
要求
1、对于字符串加密输出 加密方法为 对于字母字符输出其ASCII码值右移2(就是+2)后的字母,但是对于字母y,z
加密后输出 a,b(加密后字母大小写不变)
2、奇偶校验 对于加密后的字符串 判断每个ASCII码值(2进制)中1的个数 如果不是奇数个1 那么最高位取1
输出第二问奇偶校验后的数值 十进制表示
#include <bits/stdc++.h> using namespace std; char str[80]; unsigned char res[80];//这里注意无符号 int main(){ scanf("%s",&str); for(int i=0;i<strlen(str);i++){ if(str[i]>='a'&&str[i]<='z'){ res[i]=(str[i]-'a'+2)%26+'a'; } else{ res[i]=(str[i]-'A'+2)%26+'A'; } } for(int i=0;i<strlen(str);i++){ cout<<res[i]; } cout<<endl; for(int i=0;i<strlen(str);i++){ cout<<res[i]<<" "; int temp=res[i]; int cnt=0; char tempstr[8]; for(int j=0;j<7;j++){ if(temp&1==1){ cnt++; tempstr[j]='1'; } else tempstr[j]='0'; temp>>=1; } if(cnt%2==0){ res[i]|=0x80; tempstr[7]='1'; } else{ tempstr[7]='0'; } for(int j=7;j>=0;j--){ cout<<tempstr[j]; } //unsigned short m=res[i]; printf(" %u\n",res[i]); } return 0; }
对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12 输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。
#include <bits/stdc++.h> using namespace std; //map<char,vector<int> > a; struct node{ char c; vector<int> ind; }a[128]; int num=0; int shabi[128]; int main(){ char str[100]; while(scanf("%s",&str)!=EOF){ int cnt[130]={0}; for(int i=0;i<strlen(str);i++){ cnt[str[i]]++; } bool flag[130]={false}; for(int i=0;i<strlen(str);i++){ if(cnt[str[i]]>1){ if(!flag[str[i]]){ shabi[str[i]]=num; a[num].c=str[i]; vector<int> temp; temp.push_back(i); a[num++].ind=temp; flag[str[i]]=true; } else{ a[shabi[str[i]]].ind.push_back(i); //a[str[i]].push_back(i); } } } for(int i=0;i<num;i++){ for(int j=0;j<a[i].ind.size();j++){ if(j!=0) printf(","); printf("%c:%d",a[i].c,a[i].ind[j]); } printf("\n"); } // for(map<char,vector<int>>::iterator it=a.begin();it!=a.end();it++){ // char c=it->first; // for(int i=0;i<it->second.size();i++){ // if(i!=0) // printf(","); // printf("%c:%d",c,it->second[i]); // } // printf("\n"); // } } return 0; }
可能有多组测试数据,对于每组数据,如果IP地址合法则输出"Yes!”,否则输出"No!”。 合法的IP地址为: a、b、c、d都是0-255的整数。
#include <bits/stdc++.h> using namespace std; int main(){ int point_pos[5]; point_pos[0]=-1; string s; while(cin>>s){ int a=1;//记录点位置 bool flag=true; for(int i=0;i<s.size();i++){ if(s[i]=='.'&&a==4){ flag=false; break; } if(s[i]=='.'){ point_pos[a++]=i; } } if(a!=4){ flag=false; } point_pos[5]=s.size(); if(flag){ int num; string temp; for(int i=0;i<4;i++){ num=atoi((s.substr(point_pos[i]+1,point_pos[i+1])).c_str());//取子串用substr(a,b)b是结尾符后一位 atoi将字符串转变为整数 //cout<<num<<endl; if(num<0||num>255){ flag=false; break; } } } if(flag){ cout<<"Yes!"<<endl; } else cout<<"No!"<<endl; } return 0; }
输入包括两个数a和b,其中a和b的位数不超过1000位。
大整数处理
用字符串:
#include <bits/stdc++.h> using namespace std; void rev(char str1[],char str2[]){ for(int i=0,j=strlen(str1)-1;j>=0;j--,i++){ str2[i]=str1[j]; } } int lena,lenb; char s1[1100],s2[1100],res[1100],a[1100],b[1100]; int add(char str1[],char str2[]){ int carry=0,sum,temp; int i; for(i=0;i<lena||i<lenb;i++){ temp=str1[i]+str2[i]-'0'-'0'; sum=(temp+carry)%10; carry=(temp+carry)/10; res[i]=sum+'0'; } if(carry){ res[i]=1; i++; } return i-1; } int main(){ while(scanf("%s %s",&s1,&s2)!=EOF){ memset(a,'0',1100*sizeof(char)); memset(b,'0',1100*sizeof(char)); lena=strlen(s1); lenb=strlen(s2); rev(s1,a); //puts(a); rev(s2,b); //puts(b); int reslen=add(a,b); for(int i=reslen;i>=0;i--){ putchar(res[i]); } putchar('\n'); } return 0; }
用int:
#include <bits/stdc++.h> using namespace std; int res[1002]; int lena,lenb,lenres; string str1,str2; void rev(string str,int num[]){ for(int i=0,j=str.size()-1;j>=0;j--,i++){ num[i]=str[j]-'0'; } } int add(int a[],int b[]){ int carry=0,temp,i;//进位不初始化0会出错 for(i=0;i<lena||i<lenb;i++){ temp=a[i]+b[i]+carry; res[i]=temp%10; carry=temp/10; } //cout<<carry; if(carry){ res[i]=1; i++; } lenres=i-1; } int main(){ while(cin>>str1){ cin>>str2; lena=str1.size(); lenb=str2.size(); int a[1001]={0},b[1001]={0};//数组不初始化0也出错 rev(str1,a); rev(str2,b); add(a,b); for(int i=lenres;i>=0;i--){ printf("%d",res[i]); } printf("\n"); } return 0; }
守形数是这样一种整数,它的平方的低位部分等于它本身。 比如25的平方是625,低位部分是25,因此25是一个守形数。 编一个程序,判断N是否为守形数。
#include <bits/stdc++.h> using namespace std; int main(){ int n; while(cin>>n){ bool flag=false; int sq=n*n; string s1=std::to_string(n); string s2=std::to_string(sq); int ind=s2.find(s1); if(ind!=string::npos){ if(ind+s1.size()==s2.size()) flag=true; } if(flag){ cout<<"Yes!"<<endl; } else cout<<"No!"<<endl; } return 0; }
可能有多组测试数据,对于每组数据, 对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。
取二进制位的方法
#include <bits/stdc++.h> using namespace std; char str[101]; int main(){ while(scanf("%s",&str)!=EOF){ //cout<<strlen(str)<<endl; for(int i=0;i<strlen(str);i++){ char c=str[i];//原来这里没有用c直接用了str[i] 导致循环条件中strlen(str)发生变化 程序出错 char res[8]; int num=0; int coun=7; while(coun>0){ if(c&0x1){ res[coun]='1'; num++; } else res[coun]='0'; coun--; c>>=1; } if(num%2==0){ res[0]='1'; } else res[0]='0'; printf("%s\n",res); } } return 0; }