文章目录:
1、hello word
#include<iostream>
using namespace std;
int main ()
{
cout<<"Hello World!"<<endl;
return 0;
}
2、打印沙漏
#include<iostream>
using namespace std;
int main ()
{
int n,row=0;
char c;
cin>>n>>c;
//1、计算一共多少行
int i=0;
for(i=0;i<n;i++)
if((2*i*(i+2)+1)>n)
{
row=i-1;
break;
}
for(int i=row;i>=1;i--)
{
for(int k=row-i;k>=1;k--) cout<<" ";
for(int j=i*2+1;j>=1;j--) cout<<c;
cout<<endl;
}
for(int i=0;i<row;i++) cout<<" ";
cout<<c<<endl;
for(int i=1;i<=row;i++){
for(int k=row-i;k>=1;k--) cout<<" ";
for(int j=i*2+1;j>=1;j--) cout<<c;
cout<<endl;
}
cout<<(n-(2*row*(row+2)+1));
return 0;
}
3、个位数统计
// 时间:2022.04.02 23点47分
//第一次答案最后一个测试点无法通过是因为int类型无法存储1000位的数,所以需要换成string类型
// #include<iostream>
// using namespace std;
// int n,a[10];
// int main ()
// {
// cin>>n;
// while(n>0)
// {
// int b=n%10;
// a[b]++;
// n=n/10;
// }
// for(int i=0;i<10;i++)
// {
// if(a[i]!=0)
// {
// printf("%d:%d\n",i,a[i]);
// }
// }
// return 0;
// }
#include<iostream>
#include<string>
using namespace std;
int a[10];//这个数组用来记录输入数字中每个数字出现的次数a[1]=2表示数字1出现了两次
string str;
int main ()
{
cin>>str;
for (int i = 0; i < str.size(); i++)
{
a[str[i]-48]++; //由于输入的是字符所以需要将字符转换成数字
}
for(int i=0;i<10;i++)
{
if(a[i]!=0)
{
printf("%d:%d\n",i,a[i]);
}
}
return 0;
}
4、计算摄氏温度
// 时间:2022.04.02 23点55分
//C=5×(F−32)/9。
#include<iostream>
using namespace std;
int main ()
{
int f;
cin>>f;
printf("Celsius = %d",5*(f-32)/9);
return 0;
}
5、考试座位号
// 时间:2022.04.03 00点41分
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int m,n;
class Mes{
public:
Mes(string id,int testid,int gameid):m_id(id),m_testid(testid),
m_gameid(gameid){};
string m_id;//准考证号
int m_testid;//试机座位号
int m_gameid;//考试座位号
};
int main (){
cin>>n;
vector<Mes>mv;
for(int i=1;i<=n;i++)
{
string str;
int testid,gameid;
cin>>str>>testid>>gameid;
Mes ms(str,testid,gameid);
mv.push_back(ms);
}
cin>>m;
int ret;
while(m--){
cin>>ret;
for(int i=0;i<n;i++)
{
if(ret==mv[i].m_testid)
cout<<mv[i].m_id<<" "<<mv[i].m_gameid<<endl;
}
}
return 0;
}
6、连续因子
// 时间:2022.04.03 11点59分
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
int n;
vector<int>a;//每次遍历存放因子的容器
vector<int>ans;//存放最终答案的容器
bool isprime(int n)
{
if(n<2)//1不是素数
return false;
for(int i=2;i<sqrt(n);i++)
if(n%i==0)
return false;
return true;
}
int main ()
{
cin>>n;
int res=-1;//res用来记录当前数组的长度,初始化为负数
//判断是否是素数,如果为素数则直接输出自己本身即可
if(isprime(n)){
cout<<1<<endl<<n;
return 0;
}
for(int i=2;i<=n;i++)
{
int tmp=1;
a.clear();//每次开始遍历时先要将a数组清空
int cnt=0;//记录相邻因子的长度
for(int j=i;j<=n;j++)
{
tmp*=j;
if(n%tmp!=0)//如果发现无法被整除则退出循环,此时以i为开始的相邻因子的遍历已经结束
break;
a.push_back(j);
cnt++;
}
if(res<cnt)//如果当前答案中的相邻因子的长度小于此时遍历的结果则进行更新
{
res=cnt;
ans.clear();
for(int i=0;i<a.size();i++)
ans.push_back(a[i]);
}
}
cout<<ans.size()<<endl;
for(int i=0;i<ans.size();i++)
{
if(i==0)
cout<<ans[0];
else
cout<<"*"<<ans[i];
}
return 0;
}
7、念数字
// 时间:2022.04.03 15点50分
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
vector<string>s;
s.push_back("ling");
s.push_back("yi");
s.push_back("er");
s.push_back("san");
s.push_back("si");
s.push_back("wu");
s.push_back("liu");
s.push_back("qi");
s.push_back("ba");
s.push_back("jiu");
string n;
cin>>n;
int i=1;
if(n[0]=='-'){
printf("fu");
}
else{
cout<<s[n[0]-'0'];
}
for(i;i<n.size();i++){
cout<<" "<<s[n[i]-'0'];
}
return 0;
}
8、求整数段和
// 时间:2022.04.03 16点02分
#include<iostream>
using namespace std;
int main ()
{
int a,b;
cin>>a>>b;
int k=0,sum=0;
for(int i=a;i<=b;i++)
{
printf("%5d",i);
k++;
sum+=i;
if(k%5==0)
cout<<endl;
}
if(k%5!=0)//如果输出所有的整数之后,未到行尾则输出一个换行符
cout<<endl;
printf("Sum = %d\n",sum);
return 0;
}
9、N个数求和
// 时间:2022.04.03 18点46分
#include<iostream>
using namespace std;
long long int gcd(long long int a, long long int b)
{
return b ? gcd(b, a % b) : a;
}
int main()
{
long long int N = 0, a = 0, b = 0, sum_a = 0, sum_b = 1, t;
scanf("%lld", &N);
for (int i = 0; i < N; i++)
{
scanf("%lld/%lld", &a, &b);
//通分相加
sum_a *= b;
sum_a += a * sum_b;
sum_b *= b;
//约分
t = gcd(sum_a, sum_b);
sum_a /= t;
sum_b /= t;
}
if (sum_a % sum_b == 0)//只有整数部分
printf("%lld\n", sum_a / sum_b);
else if (sum_a < sum_b)//真分数
printf("%lld/%lld\n", sum_a, sum_b);
else//假分数
printf("%lld %lld/%lld\n", sum_a / sum_b, sum_a % sum_b, sum_b);
return 0;
}
10、比较大小
// 时间:2022.04.03 18点57分
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
int mmin=min(a,b);
mmin=min(mmin,c);
int mmax=max(a,b);
mmax=max(mmax,c);
int mmid;
if(a>mmin&&a<mmax)
mmid=a;
if(b>mmin&&b<mmax)
mmid=b;
if(c>mmin&&c<mmax)
mmid=c;
cout<<mmin<<"->"<<mmid<<"->"<<mmax<<endl;
return 0;
}
11、A-B
// 时间:2022.04.04 15点46分
//第一种写法
// #include <stdio.h>
// #include<string.h>
// #include<stdlib.h>
// char delete(char *str,char target);
// int main(){
// char a[100000];
// char b[100000];
// gets(a);
// gets(b);
// int len1=strlen(a);
// int len2=strlen(b);
// for(int i=0;i<len2;i++){
// delete(a,b[i]);
// }
// printf("%s\n",a);
// return 0;
// }
// char delete(char *str,char target){
// int i,j=0;
// for(i=0;str[i]!='\0';i++){
// if(str[i]!=target){
// str[j++]=str[i];
// }
// }
// str[j]='\0';
// return str;
// }
#include<stdio.h>
#include<string.h>
int main(){
char a[100000],b[100000];
gets(a);
gets(b);
//遍历字符串a,然后在字符串b中查找a的每一个字符
//如果查到则不输出,没查到则进行输出
//学习大佬写法hhh
for(int i=0;i<strlen(a);i++)
{
if(strchr(b,a[i]))//字符串查找函数
continue;
else
printf("%c",a[i]);
}
return 0;
}
12、计算指数
// 时间:2022.04.04 15点59分
#include<iostream>
#include<cmath>
using namespace std;
int n;
int main ()
{
cin>>n;
// int ret=pow(2,n);
//printf("2^%d = %d\n",n,ret);
printf("2^%d = %d\n",n,(int)pow(2,n));
return 0;
}
13、计算阶乘和
#include<iostream>
using namespace std;
int func(int i)
{
int sum=1;
for(int j=i;j>=1;j--)
sum*=j;
return sum;
}
int main()
{
int n,sum=0;
cin>>n;
for(int i=1;i<=n;i++)
sum+=func(i);
cout<<sum<<endl;
return 0;
}
14、简单题
#include<iostream>
using namespace std;
int main ()
{
cout<<"This is a simple problem."<<endl;
return 0;
}
15、和奥巴马一起画方块
#include<iostream>
using namespace std;
int main ()
{
int n;
char c;
scanf("%d %c",&n,&c);
//判断n的奇偶性
if(n%2==0){
for(int i=1;i<=n/2;i++){
for(int j=1;j<=n;j++)
printf("%c",c);
cout<<endl;
}
}
else
for(int i=1;i<=n/2+1;i++){//如果为奇数行数需要加一
for(int j=1;j<=n;j++)
printf("%c",c);
cout<<endl;
}
return 0;
}
16、查验身份证
// 时间:2022.04.04 18点51分
#include<iostream>
#include<string>
using namespace std;
int n;
char arr[]={"10X98765432"};//校验码数组
int brr[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//权位数组
int main ()
{
cin>>n;
bool ret=true;//标志位,如果有错误的身份证号则变为false
string str;
while(n--)
{
str.clear();
cin>>str;
int ans=0;
//每个位的权重:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2
for(int i=0;i<=16;i++)
ans+=(str[i]-'0')*brr[i];
ans%=11;
if(str[17]!=arr[ans]){
cout<<str<<endl;
ret=false;
}
//校验码
//Z:0 1 2 3 4 5 6 7 8 9 10
//M:1 0 X 9 8 7 6 5 4 3 2
}
if(ret)
cout<<"All passed"<<endl;
return 0;
}
17、到底有多二
// 时间:2022.04.04 19点19分
#include<iostream>
#include<string>
using namespace std;
int main ()
{
string str;
cin>>str;
int count=0,cnt=0;//count表示这个数中有几个数字2,cnt记录这个数的有效位数
bool ret=false;//负数标志位初始化为正数
//先找出这个数有几个数字2
for(int i=0;i<str.size();i++)
if(str[i]-'0'==2)
count++;
//判断是否为负数
if(str[0]=='-')
ret=true;
float ans=0;
if(ret)//为负数的情况
{
cnt=str.size()-1;
ans=((float)count/cnt)*1.5;
if(str[str.size()-1]-'0'==0//判断奇偶性
||str[str.size()-1]-'0'==2
||str[str.size()-1]-'0'==4
||str[str.size()-1]-'0'==6
||str[str.size()-1]-'0'==8)
ans*=2;
}
else{//正数的情况
cnt=str.size();
ans=((float)count/cnt);
if(str[str.size()-1]-'0'==0
||str[str.size()-1]-'0'==2
||str[str.size()-1]-'0'==4
||str[str.size()-1]-'0'==6
||str[str.size()-1]-'0'==8)
ans*=2;
}
printf("%.2f%%\n",ans*100);
return 0;
}
18、大笨钟
// 时间:2022.04.04 19点57分
#include<iostream>
using namespace std;
int main ()
{
int hh,mm;
scanf("%d:%d",&hh,&mm);
if(hh>=0&&hh<12)//未到敲钟时间
{
printf("Only %02d:%02d. Too early to Dang.",hh,mm);
return 0;
}
if(hh==12&&mm==0)//特判一下小时为12并且分钟为0的情况
{
printf("Only %02d:%02d. Too early to Dang.",hh,mm);
return 0;
}
//小时为整点分钟为0的情况
if(mm==0){
for(int i=1;i<=hh-12;i++)
cout<<"Dang";
}
//小时为整点分钟不为0的情况
if(mm!=0)
for(int i=1;i<=hh-11;i++)
cout<<"Dang";
cout<<endl;
return 0;
}
19、谁先倒
// 时间:2022.04.04 22点44分
#include<iostream>
using namespace std;
int a,b;//a和b分别是甲乙两人的酒量
int n;//n轮比赛记录
int a_count,b_count;//a_count表示甲当前喝的酒量
int main()
{
cin>>a>>b;
cin>>n;
while(n--){
int as,ap,bs,bp;//as代表甲喊的数字,ap代表甲比划的数字
//如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。
cin>>as>>ap>>bs>>bp;
//这里有两个易错点:1、当两个人同时输或者同时赢时都是不喝酒的
//2、假设甲的最大酒量是1,但是当甲喝一次之后不会倒,只有当喝两次之后才会倒
if((bp==(as+bs))&&(ap!=(as+bs)))//乙输而甲没输
b_count++;
if((ap==(as+bs))&&(bp!=(as+bs)))//甲输而乙没输
a_count++;
//判断两人是否有喝醉的人
if(a_count==a+1)//甲醉了
{
cout<<"A"<<endl;
cout<<b_count<<endl;
return 0;
}
if(b_count==b+1)//甲醉了
{
cout<<"B"<<endl;
cout<<a_count<<endl;
return 0;
}
}
return 0;
}
20、帅到没朋友
// 时间:2022.04.05 13点35分
//帅到没朋友.
//用a[i]表示i的朋友数,为0则为帅的没朋友的人(没有朋友或者自恋狂)
#include <stdio.h>
int main()
{
int a[1000000]={ 0 };
int N,K,M;
int i,n,m,sum=0;//sum是标志符,一举两用,在是否输出空格和是否找到太帅的人做标记
scanf("%d",&N);
while(N--)
{
scanf("%d",&K);
for(i=1;i<=K;i++)
{
scanf("%d",&n);//避免有些只有一个人的朋友圈重复添加产生的影响
if(K!=1)
{
a[n]+=K;//a[n]=1;//此人不帅
}
}
}
scanf("%d",&M);
while(M--)
{
scanf("%d",&m);
if(a[m]==0)
{
if(sum!=0) printf(" ");//按输出格式的
printf("%05d",m);// '%05d',输出占五位,不足者用0补位
a[m]=1;//输出后,做标记,避免重复查询
sum++;
}
}
if(sum==0) printf("No one is handsome");
return 0;
}
21、重要的事情说三遍
// 时间:2022.04.05 15点41分
#include<iostream>
using namespace std;
int main ()
{
int n=3;
while(n--){
cout<<"I'm gonna WIN!"<<endl;
}
}
22、奇偶分家
// 时间:2022.04.05 15点42分
#include<iostream>
using namespace std;
int n,j_sum,o_sum;
int main ()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int ret;
cin>>ret;
if(ret%2==0)
o_sum++;
else
j_sum++;
}
cout<<j_sum<<" "<<o_sum<<endl;
return 0;
}
23、输出GPLT
// 时间:2022.04.10 10点11分
// 思路:先统计字符串中需要输出字符个数,用一个数组顺序输出即可
#include<iostream>
#include<string>
using namespace std;
int arr[5];//arr[1]代表字符G的个数
int main ()
{
string str;
cin>>str;
for(int i=0;i<str.size();i++)
{
if(str[i]=='G'||str[i]=='g')
arr[1]++;
if(str[i]=='P'||str[i]=='p')
arr[2]++;
if(str[i]=='L'||str[i]=='l')
arr[3]++;
if(str[i]=='T'||str[i]=='t')
arr[4]++;
}
while(arr[1]!=0 || arr[2]!=0 || arr[3]!=0 || arr[4]!=0){//只要有一个字符还没有输出完就一直循环
for(int i=1;i<=4;i++)
{
if(arr[1]!=0)
{
cout<<'G';
arr[1]--;
}
if(arr[2]!=0)
{
cout<<'P';
arr[2]--;
}
if(arr[3]!=0)
{
cout<<'L';
arr[3]--;
}
if(arr[4]!=0)
{
cout<<'T';
arr[4]--;
}
}
}
cout<<endl;
return 0;
}
24、后天
// 时间:2022.05.06 21点50分
#include<iostream>
using namespace std;
int main ()
{
int n;
cin>>n;
if(n==5){
cout<<7<<endl;
return 0;}
cout<<(n+2)%7<<endl;
return 0;
}
25、正整数A+B
// 时间:2022.05.30 22点43分
// 这个题l1中傻x,测试点3的数据123 123 kjaksdj应该输出123 + ? = ?
//就是这个点害得我一直过不了
#include<iostream>
#include<string>
#include<sstream>
#include<algorithm>
using namespace std;
//注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串
//这句话是个大坑,a有可能是空串
string a,b;
bool check(string str)
{
for(int i=0;i<str.size();i++)
{
//有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。
if(str[i]=='-' || str[i]=='.'|| str[i]-'0'<0 || str[i]-'0'>9)//检查负数乱码和带小数点的情况
return false;
}
//检查数字的范围是否在1~1000
int ret;//字符串转换后的数字大小
stringstream ss;
ss<<str;
ss>>ret;
if(ret<1 || ret >1000)
return false;
return true;
}
int main ()
{
string str;//一定要字符串按行读入
getline(cin,str);
int ans=str.find(" ");//找到第一个空格的位置即是a,b的分界线
a=str.substr(0,ans);
b=str.substr(ans+1,str.size()-ans+1);
bool bool_a=check(a);//判断a和b的合法性
bool bool_b=check(b);
if(bool_a&&bool_b)//两个都是合法的情况
{
int aa,bb;//aa、bb是数字形式
stringstream ss,tt;
ss << a;
ss >> aa;
tt<<b;
tt>>bb;
cout<<a<<" + "<<b<<" = "<<aa+bb<<endl;
}
if(!bool_a&&bool_b)//b字符串合法
{
int bb;
stringstream ss;
ss<<b;
ss>>bb;
printf("? + %d = ?\n",bb);
}
if(bool_a&&!bool_b)//a字符串合法
{
int aa;
stringstream ss;
ss<<a;
ss>>aa;
printf("%d + ? = ?\n",aa);
}
if(!bool_a&&!bool_b)//两个都不合法
{
printf("? + ? = ?\n");
}
return 0;
}
26、I LOVE GPLT
// 时间:2022.05.06 21点43分
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str("I Love GPLT");
for(int i=0;i<str.size();i++)
cout<<str[i]<<endl;
return 0;
}
27、出租
// 时间:2022.04.11 20点08分
#include<iostream>
#include<string>
#include<vector>
using namespace std;
string str;//电话号码
//第一个数组arr
vector<int>arr;
int a[10];//a[0]=0代表电号中没有0这个数字
int main ()
{
cin>>str;
//先统计一下电话号码中都有数字几
for(int i=0;i<str.size();i++){
a[str[i]-'0']++;
}
//输出第一个字符串
// for(int i=0;i<10;i++)
// if(a[i]!=0)
// printf("%d:%d\n",i,a[i]);
// int[] arr = new int[]{8,3,2,1,0};
bool flag=false;//第一个数字前没有分号,用来处理这种情况
printf("int[] arr = new int[]{");
for(int i=9;i>=0;i--){
if(!flag&&a[i]!=0){
printf("%d",i);
flag=true;
arr.push_back(i);
continue;
}
if(flag&&a[i]!=0){
//printf(",%d",i);
cout<<","<<i;
arr.push_back(i);
}
}
printf("};\n");
//输出第二个字符串
//int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};
flag=false;//第一个数字前没有分号,用来处理这种情况
printf("int[] index = new int[]{");
for(int i=0;i<11;i++)
{
//找到这个电话号码这一位数字在arr数字中对应的位置
int ret=str[i]-'0';
for(int j=0;j<arr.size();j++){
if(!flag&&ret==arr[j]){
printf("%d",j);
flag=true;
continue;
}
if(flag&&ret==arr[j])
//printf("%,%d",j);
cout<<","<<j;
}
}
printf("};\n");
return 0;
}
28、判断素数
// 时间:2022.04.12 22点49分
#include<iostream>
#include<cmath>
using namespace std;
int n,ret;
bool check(int m)
{
int k=(int)sqrt( (double)m );
for(int i=2;i<=k;i++)
if(m%i==0)
return false;//不是素数
return true;//是素数
}
int main ()
{
cin>>n;
while(n--)
{
cin>>ret;
if(ret==1)//特判1的情况,1不是素数
{
cout<<"No"<<endl;
continue;
}
if(check(ret))//是素数
cout<<"Yes"<<endl;
if(!check(ret))
cout<<"No"<<endl;
}
return 0;
}
29、是不是太胖了
// 时间:2022.04.12 22点49分
#include<iostream>
#include<cmath>
using namespace std;
int n,ret;
bool check(int m)
{
int k=(int)sqrt( (double)m );
for(int i=2;i<=k;i++)
if(m%i==0)
return false;//不是素数
return true;//是素数
}
int main ()
{
cin>>n;
while(n--)
{
cin>>ret;
if(ret==1)//特判1的情况,1不是素数
{
cout<<"No"<<endl;
continue;
}
if(check(ret))//是素数
cout<<"Yes"<<endl;
if(!check(ret))
cout<<"No"<<endl;
}
return 0;
}
30、一帮一
// 时间:2022.04.12 23点14分
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Person
{
public:
Person(int sex,string name):m_sex(sex),m_name(name){};
int m_sex;
string m_name;
bool ret=false;//用来标记这个人是否已经输出过
};
int n;
vector<Person>mv;
int main ()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int sex;
string name;
cin>>sex>>name;
mv.push_back(Person(sex,name));
}
for(int i=0;i<n/2;i++)
{
for(int j=n-1;j>=0;j--)
{
if((mv[i].m_sex + mv[j].m_sex==1)&&(mv[j].ret==false))//两个人性别和为1,并且没有被输出过
{
cout<<mv[i].m_name<<" "<<mv[j].m_name<<endl;
mv[j].ret=true;//输出一次之后需要将这个标志位改为true
break;//注意此时需要加break,只要找到最靠后的可以匹配的一个人就可以了,不加break,会将前面的人都输出一次
}
}
}
return 0;
}
版权声明:本文为weixin_53051813原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。