PTA刷题记录

实验三

3-2

在这里插入图片描述

#include<iostream>
#include<math.h>
#include<set>
#include<string>
using namespace std;

int main()
{
    int y{};
    unsigned int n{};
    cin >> y >> n;
    int y_before = y;
    string y_print;
    while(true)
    {
        int a,b,c,d;
        if (y<10)
        {   a = 0;
            b = 0;
            c = 0;
            d = y;
            y_print = "000"+to_string((y));
        }
        else if (y < 100)
        {
            a = 0;
            b = 0;
            c = floor(y/10);
            d = y % 10;
            y_print = "00"+to_string(y);
        }
        else if (y < 1000)
        {
            a = 0;
            b = floor(y/100);
            c = floor((y-b*100)/10);
            d = y%10;
            y_print = "0"+to_string((y));
        }
        else
        {
            a = floor(y/1000);
            b = floor((y-a*1000)/100);
            c = floor((y-a*1000-b*100)/10);
            d = y % 10;
            y_print = to_string((y));
        }
        set<int> s1{a,b,c,d};
        if(s1.size() == n)
            break;
        else
            y += 1;
    }
    cout << y-y_before << " " << y_print << endl;
    
}

3-3谷歌的招聘 (20 分)

在这里插入图片描述

#include<iostream>
#include<string>
#include<math.h>
using namespace std;

int isPrime(int n)
{
    float patition = sqrt(n);
    if(n<2)
        return false;
    else if(n==2)
        return true;
    else
    {
        for(int i=2;i<patition;i++)
        {
            if (n%i==0)
                return false;
        }
    }
    return true;
}

int main()
{
    int L{},K{};
    cin >> L >> K;
    if (L < K)
    {
        cout << 404 <<endl;
        return 0;
    }
    string sN ;
    cin >> sN;
    string s;
    int num {0};
    int first {0};
    for(int i=0;i<=sN.length()-K;i++)
    {
        string sub = sN.substr(i,K);
        int isub = stoi(sub);
        if(isPrime(isub))
        {    
            cout << sub << endl;
            return 0;
        }
    }
    cout << 404 << endl;
    return 0;
}

版本二:

#include<iostream>
#include<string>
#include<algorithm>
#include<math.h>
using namespace std;

bool isPrime(int n);

int main()
{
    int L,K;
    string sNum;
    cin >> L >> K;
    cin.get();//注意cin遇到空白停止,保留换行符在输入流中;getline遇到换行符停止,丢弃换行符
    getline(cin,sNum);
    if(sNum.size()<K)
    {
        cout <<"404"<<endl;
        return 0;
    }
    for(int i=0;i<=sNum.size()-K;i++)
    {
        string subNum = sNum.substr(i,K);
        if(isPrime(stoi(subNum)))
        {
            cout << subNum;//输出的是字符串,0023,stoi("0023")=23(×)
            return 0;
        }
    }
    cout << "404"<<endl;
    return 0;
}

bool isPrime(int n)
{
    if(n<2)
        return false;
    else if(n==2)
        return true;
    double temp=pow(n,0.5);
    for(int i=2;i<temp;i++)
    {
        if(n%i==0)
            return false;
    }
    return true;
}

7-2

在这里插入图片描述

#include<iostream>
using namespace std;

void mysort(int d[],int N);

int main()
{
    int d[3][3];
    int pos[3][2];
    int waynum;
    //读入彩票盘
    for(int i=0;i<3;i++)
    {
        int j=0;
        while(cin>>d[i][j])
        {
            j++;
            if (getchar() == '\n')//注意这里要加‘’,而不是“”
                break;
        }
    }
    //读入坐标
    for(int i=0;i<3;i++)
    {
        int j=0;
        while(cin >> pos[i][j])
        {
            j++;
            if(getchar()=='\n')
                break;
        }
    }
    cin >> waynum;
    int temp{0};
    for(int i=1;i<10;i++)
        temp+=i;
    int i0{0},j0{0},flag=0;
    //替换0为1~9剩余数字
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            if(d[i][j]==0)
            {
                i0 = i;
                j0 = j;//这里不能break
            }
            else
            {
                temp-=d[i][j];
            }
        }
    }
    d[i0][j0] = temp;
    //设置奖项
    int sum{0};
    int num1{0},num2{0},num3{0};
    int reward[]{10000,36,720,360,80,252,108,72,54,180,72,180,119,36,306,1080,144,1800,3600};
    //三个方向上的和
    for(int i=0;i<3;i++)
    {
        int x = pos[i][0]-1;
        int y = pos[i][1]-1;
        cout << d[x][y] << endl;
    }
    int way[8][3][2]{
        {{0,0},{0,1},{0,2}},
        {{1,0},{1,1},{1,2}},
        {{2,0},{2,1},{2,2}},
        {{0,0},{1,0},{2,0}},
        {{0,0},{1,0},{2,0}},
        {{0,2},{1,2},{2,2}},
        {{0,0},{1,1},{2,2}},
        {{0,2},{1,1},{2,0}}
    };
    for(int i=0;i<3;i++)
    {
        int xv = way[waynum-1][i][0];
        int yv = way[waynum-1][i][1];
        sum += d[xv][yv];
    }
    cout << reward[sum-6] << endl;
    return 0;
}
/*
0 2 3
4 5 6
7 8 9
1 1
2 1
3 1
1
*/
输出
1
4
7
10000
  • 注意怎么输入一行字符
  • 注意(0,0)为1时

7-3

在这里插入图片描述

#include<iostream>
#include<math.h>
#include<iomanip>//用于setprecision()
using namespace std;

int main()
{  
    int N{};
    cin >> N;
    long double d[N]{};
    int i=0;
    while(cin>>d[i])
    {
        i++;
        if(getchar()=='\n')
            break;
    }
    // if(N<2)
    //     cout << fixed <<setprecision(5)<<0.00000 <<endl;
    //     return 0;
    int sum{0};
    long double sqsum{0};
    for(int i=0;i<N;i++)
    {
        sum+=d[i];
    }
    long double avg = sum/(N*1.0);//注意这里×1.0!!!
    for(int i=0;i<N;i++)
    {
        sqsum += (d[i]-avg)*(d[i]-avg);
    }
    cout << fixed << setprecision(5) << pow(sqsum/(N*1.0),0.5);//注意保留位数的说法

    return 0;
}

OUTPUT
在这里插入代码片

7-4

在这里插入图片描述

#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main()
{  
    vector<string> s(2);
    for(int i=0;i<2;i++)
    {
        cin >> s[i];
    }
    long long unsigned pos1{s[0].find("/")},pos2{s[1].find("/")};//string.find()-->long long unsigned int
    //初始化分子和分母
    int child1{},child2{},
        mother1{stoi(s[0].substr(pos1+1))},mother2{stoi(s[1].substr(pos2+1))};//string-->int:stoi()
    string temp1 = s[0].substr(0,pos1);
    string temp2 = s[1].substr(0,pos2);//注意如何取子串
        
    child1 = stoi(temp1);
    child2 = stoi(temp2);
    int child1_new{child1*mother2},child2_new(child2*mother1);
    if (child1_new>child2_new)
        cout << s[0] <<" > "<<s[1];
    else if (child1_new<child2_new)
        cout << s[0]<<" < "<<s[1];
    else
        cout <<s[0]<<" = "<<s[1];
    return 0;
}

7-5

在这里插入图片描述

#include<iostream>
#include<vector>
#include<string>
using namespace std;

struct student{
    int sex;
    char name[10];
    bool print = false;//bool print的巧妙应用
};//结构体要有分号

int main()
{  
    int N{};
    cin >> N;
    student studs[N];
    for(int i=0;i<N;i++)
    {
        scanf("%d %s",&studs[i].sex,&studs[i].name);//用scanf读入
    }
    for (int i=0;i<N/2;i++)
    {
        int first{i},last{N-1};
        while(first<last)
        {
            if(studs[first].sex != studs[last].sex && !studs[last].print)
            {   cout << studs[first].name <<" "<< studs[last].name<<endl;;
                studs[last].print = true;
                break;
            }
            else
                last -= 1;
        }
    }
    return 0;
}

7-6

在这里插入图片描述

#include<iostream>
using namespace std;

int main()
{  
    int N{};
    cin >> N;
    if(N==0)
        cout<<0<<endl;
    int d[N][N]={0};
    //生成杨辉三角的值
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<=i;j++)
        {
            if(j==0||i==j)
                d[i][j]=1;
            else
                d[i][j] = d[i-1][j-1]+d[i-1][j];
        }
    }
    //打印杨辉三角
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N+2-i;j++)
            cout<<" ";
        for(int k=0;k<i+1;k++)
        {
            cout<<d[i][k];
            if(k!=i)
            {
                int size{0},num{d[i][k+1]};
                if(num<10)
                    size=1;
                else if(num<100)
                    size=2;
                else if(num<1000)
                    size=3;
                for(int n=0;n<4-size;n++)
                    cout<<" ";
            }
        }
        cout<<endl;
    }
    return 0;
}

7-7

在这里插入图片描述

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>//去重函数unique、计数函数count()
using namespace std;


int main()
{
    int N1{},N2{};
    vector<int> d1,d2,res;
    int s;
    cin >> N1;
    while(cin >> s)
    {
        d1.push_back(s);
        if (getchar()=='\n')
            break;
    }
    cin >> N2;
    while(cin >> s)
    {
        d2.push_back(s);
        if (getchar()=='\n')
            break;
    }

    vector<int>::iterator iter=d1.begin();//注意迭代器的使用
    for(int i=0;i<N1;i++)
    {
        int pivot{d1[i]};
        int n1=count(d1.begin(),iter,pivot);
        if(n1)
        {   iter++;
            continue;
        }
        int j=0;
        for(;j<N2;j++)
        {
            if(d1[i]==d2[j])
            {   
                int n=count(d2.begin(),d2.end(),d1[i]);
                for(int k=0;k<n;k++)
                {
                    vector<int>::iterator iter;
                    iter = find(d2.begin(),d2.end(),d1[i]);//find-->literator
                    d2.erase(iter);//Vector删除指定位置的元素:vec.erase(iterator/区间)
                }
                break;
            }
        }
        if (j==N2&&count(res.begin(),res.end(),d1[i])==0)
            res.push_back(d1[i]);
        iter++;
    }
    if (d2.size()!=0)
    {
        for(int i=0;i<d2.size();i++)
            if(count(res.begin(),res.end(),d2[i])==0)
                res.push_back(d2[i]);
    }
    
    for(int i=0;i<res.size();i++)
    {
        if(i==res.size()-1)
            cout << res[i];
        else
            cout<<res[i]<<" ";
    }
    
}

7-8

在这里插入图片描述

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
    //初始化
    int N,d[10]{0};
    vector<string> svec;
    cin >> N;
    string temp;
    while(cin >> temp)
    {
        svec.push_back(temp);//注意vector和数组不一样,要用vec.push_back()
        //注意push_back放在getchar()之前!
        if(getchar()=='\n')
            break;
        
    }
    // for(int i=0;i<svec.size();i++)
    // {
    //     cout << svec[i]<<" ";
    // }
    // 读入d
    for(int i=0;i<svec.size();i++)
    {
        for(int j=0;j<svec[i].size();j++)
        {
            int n = svec[i][j]-'0';//char-->int
            d[n]+=1;
        }
    }
    // 比较大小
    int iMax{0};
    for(int i=0;i<10;i++)
    {
        if (d[i]>iMax)
            iMax = d[i];
    }
    cout << iMax <<": ";
    int n=count(d,d+10,iMax);
    int time=1;
    for(int i=0;i<10;i++)
    {
        if(time==n && d[i]==iMax)
        {   cout << i;
            time++;
        }
        else if (d[i]==iMax)
        {   cout << i << " ";
            time++;
        }
    }
}

7-9

在这里插入图片描述

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>//sort(begin,end,cmp)
using namespace std;

struct contact{
    char name[11];
    int birthday;
    char phone[18];
};

bool cmp(contact x,contact y);

int main()
{
    int n,now = 20210404;
    cin >> n;
    contact friends[n];
    for(int i=0;i<n;i++)
    {
        scanf("%s %d %s",&friends[i].name,&friends[i].birthday,&friends[i].phone);
    }
    sort(friends,friends+n,cmp);

    for(int i=0;i<n;i++)
    {
        cout << friends[i].name <<" "<<friends[i].birthday <<" "<<friends[i].phone<<endl;
    }

    return 0;

}

bool cmp(contact x,contact y)//注意sort()函数的cmp函数参数
{
    return x.birthday < y.birthday;
}

实验四

4-1

在这里插入图片描述

#include<iostream>
#include<list>
#include<string>
using namespace std;

int main()
{
    int N;
    cin >> N;
    string temp;
    list<string> lst;//list声明
    int pos;
    for(int i=0;i<N+1;i++)
    {
        getline(cin,temp);
        if(temp[0] == 'i')
        {
            pos = temp.find(" ");
            lst.push_back(temp.substr(pos+1));
        }
        else if(temp=="out")
        {
            lst.pop_front();
        }
        else if(temp=="q")
        {
            if(!lst.empty())
            {
                cout << lst.front() << endl;

            }
            else
                cout << "NULL" << endl;
        }
    }

}

4-2

在这里插入图片描述

#include<iostream>
#include<stack>
#include<string>
using namespace std;

int main()
{
    int N;
    cin >> N;
    string right = "({[";
    string left = ")}]";
    char c_right;
    string::size_type idx1,idx2;//注意如何判断某字符是否在字符串中
    if(N==0)
    {
        cout << "No" << endl;
        return 0;
    }
    for(int i=0;i<N;i++)
    {
        stack<char> stack1;//栈的声明
        string temp;
        cin >> temp;
        int n = temp.size();
        int flag = 1;
        if(n<=1)
        {
            cout << "No" << endl;
            break;
        }
        for(int j=0;j<n;j++)
        {
            idx1 = right.find(temp[j]);//find(),用于判断字符是否在{[(
            if(stack1.empty())
            {   
                if(idx1!=string::npos)//
                {
                    stack1.push(temp[j]);
                    continue;//注意对j位置字符进行操作之后-->continue
                }
                else//开头为}])的情况
                    cout << "No" << endl;
                    flag = 0;//flag用于判断是否操作过
                    break;  
            }
            else if(idx1!=string::npos)
            {
                stack1.push(temp[j]);
                continue;//注意continue
            }
            else if(idx1==string::npos)
            {
                c_right = stack1.top();
                idx1 = left.find(temp[j]);
                idx2 = right.find(c_right);
                if(idx1==idx2)
                {   
                    stack1.pop();
                    continue;
                }
                else
                {   cout <<"No" << endl;
                    flag = 0;
                    break;
                }
            }
        }
        if(flag==1&&stack1.empty())
            cout << "Yes" << endl;
        else if (flag==1&&!stack1.empty())
            cout <<"No" << endl;
    }

}

4-3

在这里插入图片描述

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    cout<<"从标准设备读入数据,直到输入是非整型数据为止"<<endl;
    int element;
    vector<int> vec;
    while(cin >> element)//element是int类型,此处用于到输入是非整型数据为止
    {
        vec.push_back(element);
    }
    sort(vec.begin(),vec.end());
    int n = vec.size();
    for(int i=0;i<n;i++)
    {
        if(i==n-1)
        {
            cout <<" "<<vec[i]<<endl;
            break;
        }
        cout << " " << vec[i];
    }
    return 0;
}


7-1

在这里插入图片描述

#include <iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;


int main()
{
    int N;
    cin >> N;
    string after = "qiao ben zhong.";
    getchar();//消除\n
    for(int i=0;i<N;i++)
    {
        string temp;//如果要更新,定义最好在for循环内部
        getline(cin,temp);
        int n=temp.length();
        int m=count(temp.begin(),temp.end(),' ');//注意count()用法,后面是字符' ',而不是" "
        string::size_type idx=0,idx_before;//idx = str.find()
        idx_before = temp.find(",");
        if(idx_before>=3&&temp.substr(n-4)=="ong."&&temp.substr(idx_before-3,3)=="ong")//上一句少于三个字符不可
        {   for(int j=0;j<m-2;j++)
                idx=temp.find(" ",idx+1);//find(查找字符,开始位置)
            temp.replace(temp.begin()+idx+1,temp.end(),after);//注意替换的用法
            cout << temp << endl;
        }
        else
            cout << "Skipped" << endl;
    }
}


7-2

在这里插入图片描述
正确答案:

#include<iostream>
#include<cstdio>
#include<vector>
#include<cmath>
#include<cstring>
using namespace std;
const int maxn=1e4+10;
int vis0[maxn];//不是特例独行数 
int vis1[maxn];//是特例独行数 
int vis[maxn];//用的 
vector<int> v[maxn];
bool jp(int u){
	if(u<=1) return 0;
	if(u==2) return 1;
	int s=sqrt(u);
	for(int i=2;i<=s;i++)
	if(u%i==0) return 0;
	return 1; 
}
int fp(int  u){
	int ans=0;
	while(u){
		int tmp=u%10;
		ans+=tmp*tmp;
		u/=10;
	}
	return ans;
}
int judge(int u){
	vis[u]=1;
	int ux=u;
	while(1){
		ux=fp(ux);
		if(ux==1) return 1;//是特例独行数---vis[u]
		if(vis[ux]) return 0;//重复了。肯定不是了
		vis[ux]=1;v[u].push_back(ux); 
	}
} 
int main(){
	int le,ri;
	cin>>le>>ri;
	memset(vis0,0,sizeof(vis0));
	memset(vis1,0,sizeof(vis1));
	for(int i=le;i<=ri;i++){
		if(!vis0[i]&&!vis1[i]){//还没判断得数
			memset(vis,0,sizeof(vis)); 
			int t=judge(i);
			if(t==1){
				vis1[i]=1;
				for(int j=0;j<v[i].size();j++){
					vis1[v[i][j]]=1;
				}
			}
			else if(t==0){
				vis0[i]=1;
				for(int j=0;j<v[i].size();j++){
					vis0[i]=1;
				} 
			}
				
		}		
	}
	for(int i=le;i<=ri;i++){
		for(int j=0;j<v[i].size();j++){
			vis1[v[i][j]]=0;
		}
	}
	int flag=0;
	for(int i=le;i<=ri;i++){
		if(vis1[i]){
			flag=1;
			int tm=v[i].size()+1;
			if(jp(i)) tm=tm*2;
			cout<<i<<" "<<tm<<endl;
		}
	}
	if(!flag) cout<<"SAD"<<endl;
	return 0;
 }

不完全答案:

#include<iostream>
#include<vector>
#include<string>
#include<math.h>
#include<algorithm>
using namespace std;

bool isPrime(int n);
int happiness(int A,int B);//0代表不是happynum,否则数字代表独立性

int main()
{
    int A=10,B=40;
    happiness(A,B);
    return 0;
}
bool isPrime(int n)
{
    if(n<2)
        return false;
    int sqt = ceil(pow(n,0.5));
    for(int i=2;i<=sqt;i++)
        if(n%i==0)
            return false;
    return true;
}

int happiness(int A,int B)
{
    vector<int> happynum;
    vector<int> happybutdepend,dependnum;
    int now;
    for(int i=A;i<=B;i++)
    {
        bool stop=false,found = false;
        string temp = to_string(i);
        vector<int> depend{};
        while(!stop&&!found)
        {
            int n = temp.size(),sum=0;
            for(int j=0;j<n;j++)
            {
                int temp_c = temp[j]-48;
                sum+=(int)pow(temp_c,2);
                temp=to_string(sum);
                if(sum==1)
                {   
                    dependnum.push_back(depend.size()+1);
                    happynum.push_back(i);
                    found = true;
                    for(int k=0;k<depend.size();k++)
                    {
                        if(depend[k]>=A&&depend[k]<=B)
                        {
                            happybutdepend.push_back(depend[k]);
                        }
                    }
                }
                else
                {   
                    vector<int>::iterator it = find(depend.begin(),depend.end(),sum);
                    if(it==depend.end())
                        depend.push_back(sum);
                    else
                        stop=true;

                }
            }

        }
    }
    if(happynum.size()==0)
    {
        cout <<"SAD"<< endl;
    }
    for(int i=0;i<happynum.size();i++)//查重
    {
        for(int j=0;j<happybutdepend.size();j++)
        {
            if(happynum[i]==happybutdepend[j])
                happynum.erase(happynum.begin()+i);
                dependnum.erase(dependnum.begin()+i);

        }
    }
    for(int i=0;i<happynum.size();i++)
    {
        int num = happynum[i];
        cout << happynum[i];
        if(isPrime(num))
        {
            cout << " " << dependnum[i]*2<<endl;
        }
        else
        {
            cout << " " << dependnum[i]<<endl;
        }
    }
    return 0;
}

7-1

在这里插入图片描述

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    int repeat{};
    cin >> repeat;
    getchar();//不要忘记初始化cin
    vector<string> week={"Sunday","Monday","Tuesday",
    "Wednesday","Thursday","Friday","Saturday"};
    for(int i=0;i<repeat;i++)
    {
        string temp;
        getline(cin,temp);
        bool flag=false;//注意flag判别是否操作过
        for(int j=0;j<week.size();j++)
        {
            if(week[j]==temp)
            {
                cout << j+1 << endl;
                flag=true;
                break;
            }
        }
        if(!flag)
            cout << -1 << endl;
    }
}

7-2

在这里插入图片描述

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<iomanip>
using namespace std;

int main()
{
    int N;
    cin >> N;
    int temp;
    vector<int> scores;
    while(cin>>temp)
    {   scores.push_back(temp);
        if(getchar()=='\n')
            break;
    }
    float iMax=scores[0],iMin=scores[0],iSum=scores[0];//这里要定义为浮点数,因为要输出浮点数
    for(int i=1;i<N;i++)
    {
        if(scores[i]>iMax)
            iMax = scores[i];
        else if(scores[i]<iMin)
            iMin = scores[i];
        iSum+=scores[i];
    }
    float favg = iSum/N;
    cout << "average = "<<fixed<<setprecision(2)<<favg<<endl;
    cout << "max = "<<fixed<<setprecision(2)<<iMax<<endl;
    cout << "min = "<<fixed<<setprecision(2)<<iMin<<endl;

}

7-3

在这里插入图片描述

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<iomanip>
using namespace std;

int BiggestCommonDivisor(int a,int b);

int main()
{
    string Q1,Q2;
    cin >> Q1 >> Q2;
    int iMother1,iMother2,iChild1,iChild2;
    string::size_type idx1,idx2;
    idx1 = Q1.find('/');
    idx2 = Q2.find('/');
    iMother1 = stoi(Q1.substr(idx1+1));
    iMother2 = stoi(Q2.substr(idx2+1));
    iChild1 = stoi(Q1.substr(0,idx1));
    iChild2 = stoi(Q2.substr(0,idx2)); 
    int commonMother = iMother1*iMother2,commonChild = 
    iChild1*iMother2+iChild2*iMother1;
    int n = BiggestCommonDivisor(commonChild,commonMother);
    if(commonChild%commonMother==0)
        cout << commonChild/commonMother << endl;
    else if(n==1)
        cout << commonChild <<"/"<<commonMother<<endl;
    else
        cout << commonChild/n <<"/"<<commonMother/n<<endl;


    return 0;
}

int BiggestCommonDivisor(int a,int b)
{
    int big,small;
    if(a>b)
    {
        big=a;
        small=b;
    }
    else
    {
        big=b;
        small=a;
    }
    while(big%small!=0)
    {
        int temp = big%small;
        big = small;
        small = temp;
    }
    return small;
}

7-4

在这里插入图片描述

#include<iostream>
#include<vector>
#include<string>
using namespace std;

struct student
{
    string sNumber;
    string name;
    int score1,score2,score3;
};

int main()
{
    int N;
    cin>>N;
    student s[N];//注意不能用vector<student> s;
    for(int i=0;i<N;i++)
    {
        cin >> s[i].sNumber>>s[i].name>>s[i].score1>>s[i].score2>>s[i].score3;
    }
    int iMax=0,iTemp=0,person=0;
    for(int i=0;i<N;i++)
    {
        iTemp = s[i].score1+s[i].score2+s[i].score3;
        if(iTemp>iMax)
        {   iMax=iTemp;
            person = i;
        }
    }
    cout << s[person].name<<" "<<s[person].sNumber<<" "<<iMax;
    return 0;
}
    

7-5

在这里插入图片描述

#include<iostream>
#include<vector>
#include<string>
using namespace std;

struct candidate{
    string zhunkao;
    int shiji;
    int kaoshi;
};

int main()
{
    int N;
    cin>>N;
    candidate c[N];
    for(int i=0;i<N;i++)
    {
        cin>>c[i].zhunkao>>c[i].shiji>>c[i].kaoshi;
    }
    int M;
    cin >> M;
    vector<int> query;
    int temp;
    while(cin>>temp)//主要要读入vector,不能直接cin>>query[i]
    {
        query.push_back(temp);//注意要先读取再判断下一个字符,getchar()会读取并且移到下一个字符上
        if(getchar()=='\n')//注意是getchar()=='\n'
            break;

    }

    for(int i=0;i<M;i++)
    {
        for(int j=0;j<N;j++)
        {
            if(c[j].shiji == query[i])
            {
                cout << c[j].zhunkao<<" "<<c[j].kaoshi<<endl;
            }
        }
    }

}
    

模拟题

7-6 彩虹瓶 (20 分)

在这里插入图片描述

#include<iostream>
#include<string>
#include<stack>
using namespace std;


int main()
{
    int N,K;
    unsigned int M;
    cin>> N >> M >> K;
    int d[K][N]={0};
    int temp;
    for(int i=0;i<K;i++)
    {
        for(int j=0;j<N;j++)
        {
            cin >> temp;
            d[i][j] = temp;
        }
    }
    for(int i=0;i<K;i++)
    {
        bool stop = false;//检测是否输出过
        stack<int> s,store;//s-->货架,store-->彩虹瓶
        for(int j=0;j<N;j++)
        {
            if(store.empty())
            {
                if(d[i][j]==1)
                {
                    store.push(d[i][j]);
                    continue;
                }
                else
                {
                    if(s.empty())
                    {
                        s.push(d[i][j]);
                        continue;
                    }
                    else
                    {
                        if(s.top()>d[i][j]&&s.size()<M)
                        {
                            s.push(d[i][j]);
                            continue;
                        }
                        else if(s.top()<d[i][j]||s.size()==M)//不能直接写else
                        {
                            cout <<"NO"<<endl;
                            stop = true;
                            break;
                        }
                    }
                }

            }
            else
            {
                if(d[i][j] == store.top()+1)
                {
                    store.push(d[i][j]);
                    while(!s.empty()&&store.top()==s.top()-1)//把货架上满足条件的物品在下一次货物到来之前放在store中
                    {
                        store.push(s.top());
                        s.pop();
                    }
                    continue;
                }
                else if(s.empty())//不要忘记s.empty()的情况,s为空时s.top()报错
                {
                    s.push(d[i][j]);
                    continue;
                }
                else if(s.top()>d[i][j]&&s.size()<M)
                {
                    s.push(d[i][j]);
                    continue;
                }
                else if(s.top()<d[i][j]||s.size()==M)//不能直接else
                {
                    cout <<"NO"<<endl;
                    stop = true;
                    break;
                }
            }
            
        }
        if(!stop)
            cout << "YES" << endl;
    }
    return 0;
}

7-7完全二叉树的层序遍历 (25 分)

在这里插入图片描述

我不会做!
#include<iostream>
#include<vector>
using namespace std;

int d[31];
void create(int N,int i)
{
    if(i>N)
        return;
    create(N,2*i);
    create(N,2*i+1);
    int temp;
    cin>>temp;
    d[i] = temp;

}

int main()
{

    int N,temp;
    cin >> N;
    create(N,1);
    for(int i=1;i<=N;i++)
    {
        if(i==N)
        {
            cout << d[i]<<endl;
            break;
        }
        cout << d[i]<<" ";
    }
}

C++ primer在线开发环境

7-2

编写一个程序,要求用户输入最多 10 个高尔夫成绩,并将其存储在一个数组中。程序允许用户提早结束输入,并在一行上显示所有成绩,然后报告平均成绩。请使用 3 个数组处理函数来分别进行输入、显示和计算平均成绩。

#include<iostream>
using namespace std;

const int ARRMAX = 10;

int full_arr(double* arr);
void show_arr(double* arr,int count);
double avgGrade(double* arr,int count);

int main()
{
    double arr[ARRMAX];
    int count = full_arr(arr);
    show_arr(arr,count);
    double averageGrade = avgGrade(arr,count);
    cout<<"The average grage is: "<<averageGrade<<endl;

}

int full_arr(double* arr)
{
    double temp;
    int count=0;
    for(int i=0;i<ARRMAX;i++)
    {
        cin>>temp;
        if(!temp)
        {
            cin.clear();
            while(cin.get()!='\n')
                continue;
            cout<<"bad input"<<endl;
        }
        else if(temp<0)
            break;
        else
        {
            arr[i] = temp;
            count++;
        }
    }
    return count;
}
void show_arr(double* arr,int count)
{
    for(int i=0;i<count;i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}
double avgGrade(double* arr,int count)
{
    double sum=0;
    for(int i=0;i<count;i++)
    {
        sum+=arr[i];
    }
    return (sum/count);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值