题单【函数与结构体】
P5738 【深基7.例4】歌唱比赛
P5738 【深基7.例4】歌唱比赛 - 洛谷
【细节】除以“2.0”!!!
#include<bits/stdc++.h>
using namespace std;struct Sing
{int score[25];int maxn=0;int minn=10;int total=0;double ave;
}sing[105];int main()
{int n,m;cin>>n>>m;for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>sing[i].score[j];sing[i].maxn=max(sing[i].maxn,sing[i].score[j]);sing[i].minn=min(sing[i].minn,sing[i].score[j]);sing[i].total+=sing[i].score[j];}}double most=0;for(int i=0;i<n;i++){sing[i].total-=(sing[i].minn+sing[i].maxn);sing[i].ave=sing[i].total/(m-2.0);most=max(sing[i].ave,most);}printf("%0.2f",most);return 0;
}
P5739 【深基7.例7】计算阶乘
P5739 【深基7.例7】计算阶乘 - 洛谷
【方法一】循环
#include<bits/stdc++.h>
using namespace std;int main()
{int n;cin>>n;int sum=1;for(int i=1;i<=n;i++){sum=sum*i;}cout<<sum;return 0;
}
【方法二】递归
#include<bits/stdc++.h>
using namespace std;long long work(int n)
{if(n==1) //函数调用终止条件,当函数调用到 x = 1 的时候,就停止{return 1;}else //否则调用 work(n - 1),返回 n * work(n - 1){return n*work(n-1);}
}int main()
{int n;cin>>n;cout<<work(n);return 0;
}
P5461 赦免战俘
P5461 赦免战俘 - 洛谷
【递归】
#include<bits/stdc++.h>
using namespace std;
int n,p=1,a[1050][1050];void di(int x,int l,int q) //x为正方形边长,l、q分别为递归正方形的横纵坐标
{if(x==2) //递归边界{a[l][q]=0;return;}for(int i=l; i<=l+x/2-1; i++)for(int j=q; j<=q+x/2-1; j++)a[i][j]=0; //将左上方的正方形清零di(x/2,l+x/2,q);di(x/2,l+x/2,q+x/2); di(x/2,l,q+x/2); //此处是递归剩余的三个正方形
}
int main()
{cin>>n;for(int i=1; i<=n; i++){p*=2; //计算正方形的边长p}for(int i=1; i<=p; i++){for(int j=1; j<=p; j++){a[i][j]=1; //将a数组先赋值为1}}di(p,1,1); //开始递归for(int i=1; i<=p; i++){for(int j=1; j<=p-1; j++){cout<<a[i][j]<<" ";}cout<<a[i][p]<<endl;}return 0;
}
P5741 【深基7.例10】旗鼓相当的对手 - 加强版
P5741 【深基7.例10】旗鼓相当的对手 - 加强版 - 洛谷
#include<bits/stdc++.h>
using namespace std;struct Student
{string name;int chinese;int math;int english;int total;
}student[1005];bool cmp(const Student &a, const Student &b)
{return a.name < b.name;
}int main()
{int n;cin>>n;for(int i=0;i<n;i++){cin>>student[i].name;cin>>student[i].chinese;cin>>student[i].math;cin>>student[i].english;student[i].total=student[i].chinese+student[i].math+student[i].english;}sort(student, student + n, cmp);for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){int num1=student[i].total-student[j].total;int num2=student[i].chinese-student[j].chinese;int num3=student[i].math-student[j].math;int num4=student[i].english-student[j].english;if(abs(num1)<=10 && abs(num2)<=5 && abs(num3)<=5 && abs(num4)<=5){cout<<student[i].name<<" "<<student[j].name<<endl;}}}return 0;
}
P1075 [NOIP 2012 普及组] 质因数分解
P1075 [NOIP 2012 普及组] 质因数分解 - 洛谷
#include<bits/stdc++.h>
using namespace std;bool isPrime(int x)
{for(int i=2;i*i<=x;i++){if(x%i==0)return 0;}return 1;
}int main()
{int n;cin>>n;int p;for(int i=2;i*i<=n;i++){if(n%i==0 && isPrime(i)==true){p=i;break;}}cout<<n/p;return 0;
}
P1304 哥德巴赫猜想
P1304 哥德巴赫猜想 - 洛谷
#include<bits/stdc++.h>
using namespace std;bool isPrime(int x)
{for(int i=2;i*i<=x;i++){if(x%i==0)return 0;}return 1;
}int main()
{int n;cin>>n;int p;for(int i=4;i<=n;i+=2){for(int j=2;j*2<=i;j++){if(isPrime(j) && isPrime(i-j)){cout<<i<<"="<<j<<"+"<<i-j<<endl;break;}}}return 0;
}
P1217 [USACO1.5] 回文质数 Prime Palindromes
P1217 [USACO1.5] 回文质数 Prime Palindromes - 洛谷
#include <iostream>
#include <cmath>
using namespace std;
bool prime(int x)
{bool b=true;for(int i=2;i<=sqrt(x);i++){if(x%i==0)b=false;}return b;
}//判断质数的函数
int main()
{int a,b;int c[100000];int i=3;int d1,d2,d3,d4,d5;c[0]=5;c[1]=7;c[2]=11;//2位数和1位数只有这三个是回文质数for(d1=1;d1<=9;d1+=2)for(d2=0;d2<=9;d2++){c[i]=d1*100+d2*10+d1;i++;}//生成3位回文数for(d1=1;d1<=9;d1+=2)for(d2=0;d2<=9;d2++)for(d3=0;d3<=9;d3++){c[i]=d1*10000+d2*1000+d3*100+d2*10+d1;i++;}//生成5位回文数for(d1=1;d1<=9;d1+=2)for(d2=0;d2<=9;d2++)for(d3=0;d3<=9;d3++)for(d4=0;d4<=9;d4++){c[i]=d1*1000000+d2*100000+d3*10000+d4*1000+d3*100+d2*10+d1;i++;}//生成7位回文数for(d1=1;d1<=9;d1+=2)for(d2=0;d2<=9;d2++)for(d3=0;d3<=9;d3++)for(d4=0;d4<=9;d4++)for(d5=0;d5<=9;d5++){c[i]=d1*100000000+d2*10000000+d3*1000000+d4*100000+d5*10000+d4*1000+d3*100+d2*10+d1;i++;}//生成9位回文数cin>>a>>b;//输入范围for(int i=0;i<100000000;i++){if(c[i]>=a&&c[i]<=b&&prime(c[i])==true){cout<<c[i]<<endl;}//判断回文数是否是质数if(c[i]>b)break;//当超出范围时及时退出循环}
}
P2415 集合求和
P2415 集合求和 - 洛谷
#include<bits/stdc++.h>
using namespace std;
int main()
{int a[35];long long ans=0;int num=0;while(cin>>a[num++]);for(int i=0;i<num;i++){ans+=a[i];}ans*=pow(2,num-2);cout<<ans;return 0;
}