小言_互联网的博客

PTA---寒假温故知新作业

407人阅读  评论(0)

🚀write in front🚀
📝个人主页:认真写博客的夏目浅石.
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:PTA学校题集
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊
✉️如果无聊的话,就来逛逛我的博客栈吧stack-frame.cn


前言

应要好同学要求更新一波寒假作业,所以咱就开始行动,帮助自己快乐他人(bushi)。


7-101 十进制转二进制

#include<iostream>

using namespace std;

int main()
{
   
    int n,i=0;
    int arr[40];
    while(~scanf("%d",&n))
    {
   
        if(n==0)
        {
   
            printf("0\n");
            continue;
        }
        while(n)
        {
   
            ++i;
            arr[i]=n%2;
            n/=2;
        }
        for(int j=i;j>0;j--) printf("%d",arr[j]);
        printf("\n");
        i=0;
    }
    return 0;
}

 

7-6 近似求PI

#include <stdio.h>

int main()
{
   
    double eps, sum=1, i, temp=1;
    scanf("%le", &eps);
    for(i=1; temp>eps; i++)
    {
   
        temp = temp*i/(2*i+1);
        sum += temp;
    }
    printf("PI = %.5f\n", 2*sum);

    return 0;
}


 

7-30 求最大公约数

#include<iostream>

using namespace std;

int gcd(int a,int b)//递归法--->辗转相除法
{
   
    if (b==0)
        return a;
    int r = a%b;
    return gcd(b,r);
}
int main()
{
   
    int n,m;
    cin>>n>>m;
    
    int ret=gcd(n,m);
    
    printf("%d\n",ret);
    
    return 0;
}

 

7-35 求阶乘问题

#include<iostream>

using namespace std;

int main()
{
   
    long long n;
    cin>>n;
    
    long long sum=1;
    
    for(long long i=n;i>1;--i) sum*=i;
    printf("%lld\n",sum);
    return 0;
}

7-27 N阶楼梯上楼问题

#include <iostream>

using namespace std;
int num[101];

void fib() 
{
   
    num[0] = 0;
    num[1] = 1;
    num[2] = 2;
    for (int i = 3; i <= 100; i++) 
    {
   
        num[i] = num[i-1] + num[i - 2];
    }
}

int main() 
{
   
    fib();
    int t;
    while(cin >> t) 
    {
   
        cout << num[t] << endl;
    }
    return 0;
}

 

7-38 数字金字塔

#include<stdio.h>

int main()
{
   
    printf("    1 \n");
    printf("   2 2 \n");
    printf("  3 3 3 \n");
    printf(" 4 4 4 4 \n");
    printf("5 5 5 5 5 \n");
    return 0;
}

7-83 使用选择法将数组中的整数按由小到大排序

#include<iostream>

using namespace std;

int arr[12];

void bulle_sort(int arr[],int n)
{
   
	int i=0;
	for(i=0;i<n-1;i++)
	{
   
		int j=0;
		for(j=0;j<n-i-1;j++)
		{
   
			if(arr[j]<arr[j+1])
			{
   
				int temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
		}
	}
}

int main()
{
   
    for(int i=0;i<10;++i) scanf("%d",&arr[i]);
    
    bulle_sort(arr,10);
    
    for(int i=0;i<10;++i) printf("%5d",arr[i]);
    
    return 0;
}

 

7-42 *求最大公约数

#include<stdio.h>

long long gcd(long long a,long long b)//递归法--->辗转相除法
{
   
    if (b==0)
        return a;
    long long r = a%b;
    return gcd(b,r);
}

int main()
{
   
    long long n,m;
    scanf("%lld %lld",&n,&m);
    
    long long ret=gcd(n,m);
    
    if(ret<0)
    {
   
        ret=-1*ret;
        printf("%lld\n",ret);
    }
    else if(ret>0)
    {
   
        printf("%lld\n",ret);
    }
    else printf("1\n");
    return 0;
}

 

7-84 编写函数,完成一组学生C语言成绩的值的运算

#include <iostream>
using namespace std;

typedef long long ll;

const int N = 15; 

int n, dat[N], aver, minn = 1e7;

int main()
{
   
    for (int i=1; i<=10; i++) 
    {
   
        cin >> dat[i];
        aver += dat[i];
        minn = min(minn, dat[i]);
    }
    aver /= 10;
    printf("average=%d\nmin=%d", aver, minn);
    return 0;
}

 

7-46 显示菱形

#include<stdio.h>
int main() 
{
   
	int n;
	char c;
	scanf("%d %c",&n,&c);
	if(n<=0) printf("None");
	else if(n%2==0) printf("Error");
	else 
    {
   
		int m=n/2+1;

		int i,j,s;
		for(i=1; i<=m; i++) 
        {
   
			for(s=1; s<=m-i; s++)
				printf(" ");
			for(j=1; j<=2*i-1; j++)
				printf("%c",c);
			printf("\n");
		}

		for(i=1; i<m; i++) 
        {
   
			for(s=1; s<=i; s++)
				printf(" ");
			for(j=1; j<=n-2*i; j++)
				printf("%c",c);
			printf("\n");
		}
	}
	return 0;
}



 

7-48 求π的近似值

#include<stdio.h>
#include<math.h>
double funpi(double e);
int main()
{
   
	double pi,e;
	scanf("%lf",&e);
	pi=funpi(e);
	printf("pi = %lf",pi);
	return 0;
}
double funpi(double e)
{
   
	double x,sum=0;
	int n=1,flag=1;
	do{
   
	x=1.0*flag/n;
	sum=sum+x;
	flag=-flag;
	n=n+2;
	}while(fabs(x)>=e); //分号!!!
	return sum*4;
}

 

7-50 汉诺(Hanoi)塔问题

#include <iostream>
using namespace std;

void hanoi(int n, char a, char b, char c)
{
   
    if(n==0) return;
    hanoi(n-1, a, c, b);
    printf("%c-->%c\n", a, b);
    hanoi(n-1, c, b, a);
}
int main()
{
   
    int n;
    cin >> n;
    hanoi(n, 'a', 'b', 'c');
    return 0;
}

 

7-49 递归实现逆序输出整数

#include<stdio.h>
#include<string.h>

void reverse(char* arr,int l,int r)
{
   
    char tmp;
    while(l<r)
    {
   
        tmp=arr[l];
        arr[l]=arr[r];
        arr[r]=tmp;
        l++;
        r--;
    }
    return;
}

int main()
{
   
    char arr[100010];
    gets(arr);
    int len=strlen(arr);
    
    reverse(arr,0,len-1);
    
    printf("%s\n",arr);
    
    return 0;
    
}

 

7-108 完美的素数

#include <stdio.h>
int is_prime(int x)
{
   
    int i = 0;
    for (i = 2; i < x; i++)
    {
   
        if (x % i == 0)
        {
   
            return 0;
        }
    }
    return x;
}
int Sum(int x)
{
   
    if (x>9)
    {
   
        return Sum(x / 10)+x % 10;
    }
    return x % 10;
}
int main()
{
   
    int n = 0;
    while (scanf("%d", &n), n != 0)
    {
   
        int sum = Sum(n);
        if (n == is_prime(n) && sum==is_prime(sum))
        printf("%d\n", n);
    }
    return 0;
}

 

7-31 汉诺塔问题

# include<stdio.h>
 void move(char ch1[],char ch2[]); 
void tower(int n,char ch1[],char ch2[],char ch3[])
{
   
	if(n==1)
	{
   
		move(ch1,ch3);
	}
	else
	{
   
		tower(n-1,ch1,ch3,ch2);
		move(ch1,ch3);
		tower(n-1,ch2,ch1,ch3);
	}
 } 
 void move(char ch1[],char ch2[])
 {
   
 	printf("%s->%s\n",ch1,ch2);
 }
 int main()
 {
   
 	int n;
 	char ch1[100],ch2[100],ch3[100];
 	scanf("%d\n",&n);
 	scanf("%s\n%s\n%s",&ch1,&ch2,&ch3);
 	tower (n,ch1,ch2,ch3);
 	return 0;
 }


 

7-37 求100以内的素数

#include<stdio.h>
int main()
{
   
	int j,sum=0;
    for(int i=2;i<=100;++i)
    {
   
        for(j=2;j<i;j++)
        {
   
            if(i%j==0) break;
            else continue;
        }
        if(j==i)
        {
   
            printf("%6d",j);
            sum++;
            if(sum%10==0)
            {
   
                printf("\n");
                sum=0;
            }
        }
    }
    return 0;
}


 

7-1 求组合数

#include <stdio.h>
 
double fact(int n);
 
int main()
{
   
	int m, n;
	double result;
	scanf("%d %d", &m,&n);
	result = fact(n) / (fact(m)*fact(n-m));
	printf("result = %.0f", result);
	
	return 0;  
}
 
double fact(int n)
{
   
	double sum = 1;
	for(int i=1;i<=n;i++)
	{
   
		sum *= i;
	}
	return sum;
}
 
 

 

7-2 素数对猜想

#include <stdio.h>
int main() {
   
	int n, cnt = 0, a[100001] = {
    0 };
	scanf("%d", &n);
	for (int i = 2; i * i < 100000; i++)
		for (int j = 2; j * i < 100000; j++) a[j * i] = 1;
	for (int i = 3; i + 2 <= n; i++) if (!a[i + 2] && !a[i]) cnt++;	//第一对符合的素数对为3,5,所以从3开始
	printf("%d", cnt);
	return 0;
}

7-13 判断素数

#include <stdio.h>
#include <math.h>
int main()
{
   
    int n, i, j;
    long long x;
    scanf("%d", &n);
    while(n--)
    {
   
        scanf("%lld", &x);
        j = 1;
        for(i = 2; i <= sqrt(x); i++)
        {
   
            if(x % i == 0)
            {
   
                j = 0;
                break;
            }
        }
        if(x == 1 || j == 0)
            printf("No\n");
        else
            printf("Yes\n");
    }
    return 0;
}


 

7-6 近似求PI

#include <stdio.h>

int main()
{
   
    double eps, sum=1, i, temp=1;
    scanf("%le", &eps);
    for(i=1; temp>eps; i++)
    {
   
        temp = temp*i/(2*i+1);
        sum += temp;
    }
    printf("PI = %.5f\n", 2*sum);

    return 0;
}


 

7-87 函数的递归调用

int fun(int n)
{
   
	if (n == 0 || n == 1)
		return 1;
	else if (n > 0)
		return n * fun(n - 1);
 
}
int main()
{
   
	int n;
	scanf("%d", &n);
	if (n < 0)
		printf("给定的数<0,no value!no value!");
	else
		printf("%d!=%d", n, fun(n));
	return 0;
}

 

7-19 函数-斐波那契数列

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
   
	int n;
	long long a[61]; 		//记得是long long 不然不够
	double x;
	while(scanf("%d",&n)!=EOF){
   
		a[1]=1;
		a[2]=1;
		for(int i = 3;i < 61;i++){
   
			a[i] = a[i - 1] + a[i - 2];
		}
		x =(double)(a[n]);		//转换一下
		printf("%.0f\n",x);
	} 
	return 0;
}


 

7-26 乘法口诀表

#include<stdio.h>

int main() 
{
   
    int N;
    scanf("%d", &N);
    for (int i = 1; i <= N; i++) 
    {
   
        for (int j = 1; j <= i; j++) 
        {
   
            if(j!=i)
                printf("%dx%d=%2d ",j,i,i*j);
            else
                printf("%dx%d=%2d",j,i,i*j);
        }
        printf("\n");
    }

    return 0;
}


 

7-66 汉诺塔问题

#include<stdio.h>
void hanoi(int n,char a,char c,char b)
{
   
    if(n==1)
        printf("1: %c -> %c\n",a,c);
    else
    {
   
        hanoi(n-1,a,b,c);
        printf("%d: %c -> %c\n",n,a,c);
        hanoi(n-1,b,c,a);
    }
}
int main()
{
   
    int n;
    scanf("%d",&n);
    getchar();
    char a,b,c;
    scanf("%c %c %c",&a,&c,&b);
    hanoi(n,a,c,b);
}

 

7-78 存款翻倍

#include <stdio.h>
int main()
{
   
    double a,c=1;
    int b=0;
    scanf("%lf",&a);
    do
    {
   
        c=c*(1+(a/100));
        b++;
    } while (c<2);
    printf("%d",b);
}

总结

基础题目,多看题解。


转载:https://blog.csdn.net/congfen214/article/details/128881922
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场