精华内容
下载资源
问答
  • pta题解
    2022-01-23 18:39:54

    一.1010 一元多项式求导

    使用while的循环输入,以及输出结果的格式化

    #include <iostream>
    using namespace std;
    int main()
    {
        int a,b,p=1;
        while(cin>>a>>b)//循环输入.
        {
            if(b!=0)//b为0的时候,系数和指数都是0
            {
               if(p==0)cout<<" ";
              cout<<a*b<<" "<<b-1;
               p=0;
            }
        }
        if(p)cout<<"0 0";
        return 0;
    }

    二.1011 A+B 和 C (15 分)

    使用三目运算符 ? :

    #include <iostream>
    using namespace std;
    int main()
    {
        int n;
        cin>>n;
        for(int i=0;i<n;i++)
        {
            long long a,b,c;
            cin>>a>>b>>c;
           printf("Case #%d: %s\n",i+1,a+b>c?"true":"false");
        }
        return 0;
    }

    三.1012 数字分类 (20 分)(柳神的代码)

    对vector的使用,以及if语句

    #include <iostream>
    #include <vector>
    using namespace std;
    int main() {
        int n, num, A1 = 0, A2 = 0, A5 = 0;
        double A4 = 0.0;
        cin >> n;
        vector<int> v[5];
        for (int i = 0; i < n; i++) {
            cin >> num;
            v[num%5].push_back(num);
        }
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < v[i].size(); j++) {
                if (i == 0 && v[i][j] % 2 == 0) A1 += v[i][j];
                if (i == 1 && j % 2 == 0) A2 += v[i][j];
                if (i == 1 && j % 2 == 1) A2 -= v[i][j];
                if (i == 3) A4 += v[i][j];
                if (i == 4 && v[i][j] > A5) A5 = v[i][j];
            }
        }
        for (int i = 0; i < 5; i++) {
            if (i != 0) printf(" ");
            if (i == 0 && A1 == 0 || i != 0 && v[i].size() == 0) {
                printf("N"); continue;
            }
            if (i == 0) printf("%d", A1);
            if (i == 1) printf("%d", A2);
            if (i == 2) printf("%d", v[2].size());
            if (i == 3) printf("%.1f", A4 / v[3].size());
            if (i == 4) printf("%d", A5);
        }
        return 0;
    }

    四.1006 Sign In and Sign Out (25 分)

    我使用了结构体,从而使,名字与时间的对应关系明了

    #include <iostream>
    #include <string>
    using namespace std;
    struct A
    {
    	string name;
    	string time1;
    	string time2;
    }n[1000];
    int main()
    {
    	int k,min=0,max=0;
    	cin >> k;
    	for (int i = 0; i < k; i++)
    		cin >> n[i].name >> n[i].time1>>n[i].time2;
    	for (int i = 1; i < k; i++)
    	{
    		if (n[min].time1>n[i ].time1)min = i;
    		if (n[max].time2 < n[i].time2)max = i;
    	}
    	cout << n[min].name << " "<<n[max].name;
    	return 0;
    }

    五.1008 Elevator (20 分)

    使用while语句循环,if语句判断求和.

    #include <iostream>
    using namespace std;
    int main()
    {
    	int num[1000] = { 0 }, n, k = 0;
    	cin >> n;
    	for (int i = 0; i < n; i++)
    		cin >> num[i];
    	k = num[0] * 6 + n * 5;//没一层都要停5s,所以先给他加起来,然后在家第一次所用的时间。
    	int j = 0;
    	while (j!=n-1)
    	{
    		int a = num[j++];//前一层
    		int b = num[j];//后一层
    		if (a > b)k += (a - b) * 4;//用前一层与后一层比较,再选择是6s还是4s。
    		else k += (b - a) * 6;
    	}
    	cout << k;
    	return 0;
    }

    更多相关内容
  • PTA 题解

    2021-12-07 17:23:40
    习题4-5 换硬币 (20 分) 将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法? 输入格式: 输入在一行中给出待换的零钱数额x∈(8,100)。 输出格式: 要求按5分、2分和1分硬币的数量依次从...

    习题4-5 换硬币 (20 分)
    将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
    输入格式:
    输入在一行中给出待换的零钱数额x∈(8,100)。
    输出格式:
    要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。
    输入样例:
    13
    输出样例:
    fen5:2, fen2:1, fen1:1, total:4
    fen5:1, fen2:3, fen1:2, total:6
    fen5:1, fen2:2, fen1:4, total:7
    fen5:1, fen2:1, fen1:6, total:8
    count = 4

    代码:

    在这里插入代码片
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int x;
        int count=0;
        int i,j,k;
        scanf("%d",&x);
        for(i=x/5;i>0;i--)
         {
         for(j=x/2;j>0;j--)
         {
          for(k=x;k>0;k--)
           {if(i*5+j*2+k==x)
        {
            printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",i,j,k,i+j+k);
            count++;
        }
         }
         }
         }
        printf("count = %d",count);
        
        system("pause");
        return 0;
    }
    

    思路:
    使用三重循环挨边遍历,来寻找符合条件的数;
    心得:注意数字从大到小的顺序

    展开全文
  • PTA题解

    2022-02-21 21:07:11
    7-5 Shuffling Machine (20 分) #include <iostream> #include <map> using namespace std; int a[60]; int b[60]; map<int,int> mp; int main(){ int k; cin>... while(k--

    汉诺塔问题

    移动步数

    不使用递归计算1个n层的汉诺塔从A柱到C柱的所有步数

    printf("完成%d层的汉诺塔需要%d步\n", num, (int)pow(2,num) - 1);
    

    递归求步数

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    int Hanio_twice(int num)
    {
    	if(1 == num)
    		return 1;
    	else
    		return 2 * Hanio_twice(num - 1) + 1;
    }
    int main()
    {
    	int num = 0;	
    	scanf("%d", &num);//塔数
    	int ret = Hanio_twice(num);
    	printf("完成%d层的汉诺塔需要%d步\n", num, ret);
    	return 0;
    }
    
    

    递归打印步骤

    #include <iostream>
    using namespace std;
    int cnt=1;
    void Hanio(int n,char A,char B,char C){
    	if(n==0)return ;
    	if(n==1){
    		printf("step %d: move %d from %c to %c\n",cnt++,n,A,C);
    		return;
    	}
    	Hanio(n-1,A,C,B);
    	printf("step %d: move %d from %c to %c\n",cnt++,n,A,C);
    	Hanio(n-1,B,A,C);
    	//递归很自然而然地能看出移动的规律,A要移到C,首先A通过C把n-1
    //	移到B,紧接着把一个移到C,再就是B上的n-1个通过A移到C,达到最终目的
    //输出的n代表盘子的编号啦,越大越在底下的盘子编号更大 
    }
    int main(){//17:42
     	int n;
     	while(cin>>n){
     		Hanio(n,'A','B','C');
    	 } 
        return 0;
    }
    

    在这里插入图片描述

    非递归打印

    #include <iostream>
    #include <stack> 
    using namespace std;
    struct node{
    	int n;
    	char s;
    	char e;
    	node(int n,char A,char B):n(n),s(A),e(B){};
    };
    char find(char A,char B){
    	char s[3]={'a','b','c'};
    	for(int i=0;i<3;i++){
    		if(s[i]!=A&&s[i]!=B)return s[i];
    	}
    }
    char find(char A,char B){
    	int vis[3]={0};
    	vis[A-'a']++;
    	vis[B-'a']++;
    	int  i=0;
    	for(;i<3;i++){
    		if(!vis[i])break;
    	}
    	return 'a'+i;
    } 
    int main(){//17:42
     	int n;
    	cin>>n;
    	stack<node> st;
    	st.push(node(n,'a','c'));
    	while(!st.empty()){
    		node p=st.top();
    		st.pop();
    		int n=p.n;
    		char A=p.s;
    		char B=p.e;
    		if(n==1)printf("%c -> %c\n",A,B);
    		else{//找到过渡柱子 
    			char transition=find(A,B);
    //			st.push(node(n-1,A,transition));
    //			st.push(node(1,A,B));
    //			st.push(node(n-1,transition,B));
    //		A要移到C,首先A通过C把n-1移到B,紧接着把一个移到C,
    //		再就是B上的n-1个通过A移到C,达到最终目的
    			//由于栈是后进先出,入栈的步骤是
    //			先: B上的n-1个通过A移到C
    //			紧接着把A上一个移到C
    //			后: A通过C把n-1移到B
    
    			st.push(node(n-1,transition,B));
    			st.push(node(1,A,B));
    			st.push(node(n-1,A,transition));
    			
    		}
    	}
        return 0;
    }
    
    

    7-21 词频统计 (30 分)

    map容器按value值排序
    scanf("%c",&ch)cin>>ch 逐个输入字符是否计入输入的空格和回车

    #include <iostream>
    #include<algorithm>
    #include <map>
    #include <vector>//map容器按value值排序,要借助vector噢 
    using namespace std;
    map<string,int> mp;
    vector< pair<string,int> > v;
    //可以用结构体,string str; int num;
    bool cmp(pair<string,int> p1,pair<string,int> p2){
    	if(p1.second!=p2.second)return p1.second>p2.second;
    	return p1.first<p2.first;//词频优先,字母首字母后靠 
    }
    int main(){//17:42
    	string s;
    	char ch;
    //	scanf("%c",&ch)
    //cin逐一输入字符时,输入的空格和回车是不作数的
    //scanf则空格和回车都会当作字符,存在缓冲区里,下一次就是它 
    	while(scanf("%c",&ch)&&ch!='#'){
    		cout<<ch<<"/";
    		if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'||ch>='0'&&ch<='9'||ch=='_'){
    			if(ch>='A'&&ch<='Z')ch+=32;//65 97  ch=ch+'a'-'A' 
    			if(s.size()<15)s+=ch;
    		}
    		else {//分隔符,是时候处理s了 
    			if(s.size()>0){
    				mp[s]++;
    				s.clear();
    			}
    		}
    	}
    	map<string,int>::iterator it; 
    	for(it=mp.begin();it!=mp.end();it++){
    		v.push_back(make_pair(it->first,it->second));
    	}
    	sort(v.begin(),v.end(),cmp);
    	cout<<v.size()<<endl;//单词个数 
    	int len=v.size()/10;
    	for(int i=0;i<len;i++){
    		cout<<v[i].second<<":"<<v[i].first<<endl;
    	} 
        return 0;
    }
    
    

    7-5 Shuffling Machine (20 分)

    #include <iostream>
    #include <map>
    using namespace std;
    int a[60];
    int b[60];
    map<int,int> mp;
    int main(){
    	int k;
    	cin>>k;
    	for(int i=1;i<=54;i++){
    		cin>>a[i];
    		b[i]=i;//i位置上的值 
    	}
    	while(k--){
    		map<int,int> mp;
    		mp.clear();
    		for(int i=1;i<=54;i++){
    			mp[a[i]]=b[i];
    		}
    		int cnt=1;
    		map<int,int>::iterator it; 
    		for(it=mp.begin();it!=mp.end();it++){
    			b[cnt++]=it->second;
    		}
    	}
    	for(int i=1;i<=54;i++){
    		if(b[i]>=1&&b[i]<=13)cout<<"S";//(b[i]-1)/13==0 
    		else if(b[i]>=14&&b[i]<=26)cout<<"H";
    		else if(b[i]>=27&&b[i]<=39)cout<<"C";
    		else if(b[i]>=40&&b[i]<=52)cout<<"D";
    		else if(b[i]>=53&&b[i]<=54)cout<<"J";
    //			cout<<b[i]<<" ";
    		if(b[i]%13==0)cout<<"13";//(b[i]-1)%13+1
    		else cout<<b[i]%13;
    		if(i!=54)cout<<" ";
    		}
        return 0;
    }
    
    展开全文
  • pta题解

    2020-02-29 15:00:56
    pta题解 习题2.4 递增的整数序列链表的插入 (15分) 这道题先申请一个空间然后把数据存进去,然后从头开始遍历,如果比当前遍历到的小,那么就插在它的前面。通过q,和l两个指针,l一直往下遍历,然后更新q,这样会...

    pta题解

    习题2.4 递增的整数序列链表的插入 (15分)

    在这里插入图片描述
    这道题先申请一个空间然后把数据存进去,然后从头开始遍历,如果比当前遍历到的小,那么就插在它的前面。通过q,和l两个指针,l一直往下遍历,然后更新q,这样会比较容易插入,要注意考虑,可能会一直遍历到最尾部才满足条件

    List Insert( List L, ElementType X )
    {
        List head=L;
        L=L->Next;
        List p=(List)malloc(sizeof(struct Node));
        p->Data=X;
        p->Next=NULL;
        List q=head;
        while(L->Data<X)//循环遍历
        {
            q=L;//更新q
            L=L->Next;//l指针往后移动
            if(L->Next==NULL)
            {
                L->Next=p;
                return head;
            }
        }
        p->Next=L;
        q->Next=p;
        return head;
    }
    
    

    习题2.5 两个有序链表序列的合并 (15分)

    在这里插入图片描述
    这道题本来我没有思路,以为要新建一个链表,后来看了别人的题解才有了思路,这道题就是建立一个头结点,然后比较两个链表,小的就插进去,然后向后移,然后继续比较,直到有一条链的指针为空了就停止,这时候还需要判断两条链是不是都插进去了,有可能有一条因为数据都比另一条大,所以就还会剩一些数字没插进去。

    List Merge( List L1, List L2 )
    {
        List L,p,w,q;
        w=L1->Next;
        q=L2->Next;
        L=(List)malloc(sizeof(List));
        p=L;
        while(w&&q)
        {
            if(w->Data<q->Data)
            {
                p->Next=w;
                p=p->Next;
                w=w->Next;
            }
            else
            {
                p->Next=q;
                p=p->Next;
                q=q->Next;
            }
        }
        if(w)
        {
            p->Next=w;
        }
        if(q)
        {
            p->Next=q;
        }
        L1->Next=NULL;
        L2->Next=NULL;
        return L;
    }
    
    
    展开全文
  • Description: 下面是一个完整的下三角九九口诀表: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 ...
  • Description:计算下列分段函数f(x)的值: f(x) x 1/x x ≠ 0 0 x = 0 Input:输入仅一行,输入一个实数x。...Output:输出仅一行,按“f(x) = result”的格式输出,其中x与result都保留一位小数。...S...
  • C++PTA题解

    千次阅读 2022-05-16 08:45:48
    没错,Li Programmer开创了最新章节:C++PTA题解,全程是:Programming Teaching Assisant 程序设计类实验辅助教学平台。网址是https://pintia.cn/home
  • Python编程PTA题解——找完数

    千次阅读 2020-03-21 14:35:07
    Description:所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。 Input:输入仅一行,输入2个正整数m和n(1<...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,021
精华内容 1,608
关键字:

pta题解