PTA编程题[2]

最大公约数和最小公倍数
#include<stdio.h>
int main()
{
    int m,n,r;
    int b;
    int x, y;
    scanf("%d %d",&m,&n);
    x=m;
    y=n;
    while(m%n){
        r=m%n;
        m=n;
        n=r;
}
    b=x*y/n;
    printf("%d %d",n,b);
    return 0;
}
高空坠球
#include<stdio.h>
int main()
{
    double s;
  double h;
    int n;
    int i;
    scanf("%lf %d",&h,&n);
    if(n==0)printf("0.0 0.0");
else{
    s=h;
    for(i=1;i<=n;i++){
                    h=h/2.0;
        s=s+h*2.0;

    }s=s-h*2;
        printf("%.1f %.1f",s,h);
}

        return 0;
}
打印菱形图案
#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    for(int i=1;i<=(n/2+1);i++){
        for(int j=1;j<=n+1-2*i;j++)
        printf(" ");
            for(int z=1;z<=2*i-1;z++)
            printf("* ");
        printf("\n");
}
    for(int i=1;i<=n/2;i++){
        for(int j=1;j<=2*i;j++)
            printf(" ");
            for(int z=1;z<=n-i*2;z++)
        printf("* ");
        printf("\n");}
    return 0;
}
猴子吃桃问题
#include<stdio.h>
int main()
{
    int n;
    int a=1;
    scanf("%d",&n);
    for(int i=1;i<n;i++){
        a=(a+1)*2;
}
    printf("%d",a);
    return 0;
}
兔子繁衍问题
#include<stdio.h>
int main(){
    int n;scanf("%d",&n);
    int yuefen=1;
    if(n==1)printf("1");
    else{
                int a=1,b=1;do{
int c;
        c=a+b;
        a=b;
        b=c;
        yuefen++;
    }while(a<n);
    printf("%d",yuefen);}
    return 0;
}
英文字母替换加密(大小写转换+后移1位)
#include<stdio.h>
int main(){
    char ch;
    ch=getchar();
    while(ch!='\n'){
        if(ch>='a'&&ch<'z')
            printf("%c",ch-31);
        else if(ch>='A'&&ch<'Z')
            printf("%c",ch+33);
        else if(ch=='Z')
            printf("a");
                else if(ch=='z')
            printf("A");
        else
            printf("%c",ch);
        ch=getchar();
    }return 0;
}
简单计算器
#include<stdio.h>
int main(){
    char op;
    int sum;
    int a;
    int falt=1;
    scanf("%d",&sum);
    while(falt){
        scanf("%c",&op);
        if(op=='=')break;
        scanf("%d",&a);
        switch(op){
            case '+':sum+=a;break;
            case '-':sum-=a;break;
            case '*':sum*=a;break;
            case '/':
                if(a==0)falt=0;
                else sum/=a;break;
            default:falt=0;break;
        }
    }
    if(falt==1)printf("%d",sum);
    if(falt==0)printf("ERROR");
    return 0;
}
单词首字母大写
#include<stdio.h>
int main(){
    char ch;
    int f=1;
    scanf("%c",&ch);
    while(ch!='\n'){
        if(f==1){
        if(ch>='a'&&ch<='z')
            ch=ch-32;
            f=0;
        }if(ch==' ')f=1;
        printf("%c",ch);
scanf("%c",&ch);
    }return 0;
}
求最大值及其下标
#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    int arr[10];
    int max;
    int j;
    scanf("%d",&arr[0]);
    max=arr[0];
    for(int i=1;i<n;i++){
        scanf("%d ",&arr[i]);
        if(max<arr[i])max=arr[i];
    }
    for( j=0;j<n;j++){
        if(arr[j]==max)break;
    }
    printf("%d %d",max,j);
    return 0;
}
将数组中的数逆序存放
#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    int arr[10];
    int a;
    for(int i=0;i<n;i++){
    scanf("%d",&arr[i]);
}
    for(int j=0;j<n/2;j++){
        a=arr[j];
        arr[j]=arr[n-1-j];
        arr[n-1-j]=a;
}printf("%d",arr[0]);
    for(int k=1;k<n;k++){
        printf(" %d",arr[k]);
}return 0;
}
找出不是两个数组共有的元素
#include<stdio.h>
int main(){
    int a1[20];
    int a2[20];
    int m,n;
    scanf("%d",&m);
    for(int i=0;i<m;i++){
        scanf("%d",&a1[i]);
    }
        scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf(" %d",&a2[i]);
    }int falt=1;int a3[20];int k=0;int i;
    for( i=0;i<m;i++){falt=1;
        for(int j=0;j<n;j++){
            if(a1[i]==a2[j])falt=0;
        }
        for(int j=0;j<k;j++){
            if(a1[i]==a3[j])falt=0;
        }
        if(falt==1){
            a3[k]=a1[i];k++;
        }
    }
        for( i=0;i<n;i++){falt=1;
        for(int j=0;j<m;j++){
            if(a2[i]==a1[j])falt=0;
        }
        for(int j=0;j<k;j++){
            if(a2[i]==a3[j])falt=0;
        }
        if(falt==1){
            a3[k]=a2[i];k++;
        }
    }    for(int i=0;i<k;i++){
        if(!i)printf("%d",a3[i]);
        else printf(" %d",a3[i]);
    }
    return 0;
}
矩阵运算
#include<stdio.h>
int main(){
    int a[10][10];
    int n;int sum=0;
    scanf("%d",&n);
        for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d ",&a[i][j]);
        }}
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
        if(i==n-1||j==n-1||j==n-1-i){;}
            else sum+=a[i][j];
        }}
    printf("%d",sum);
    return 0;
}
方阵循环右移
#include<stdio.h>
int main(){
    int a[6][6];
    int m,n;
    scanf("%d %d",&m,&n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
}for(int i=0;i<n;i++){
        for(int k=0;k<m;k++){
        int left=a[i][n-1];
        for(int j=n-1;j>0;j--){
            a[i][j]=a[i][j-1];
        }
        a[i][0]=left;}
}
        for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            printf("%d ",a[i][j]);
        }printf("\n");
}return 0;
}
计算天数
#include<stdio.h>
int main(){
    int y,m,d;
    scanf("%4d/%2d/%2d",&y,&m,&d);
    int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int sum=0;
    if(y%4==0&&y%100!=0||y%400==0){
        for(int i=0;i<m-1;i++){
            sum+=a[i];
        }
    }
    else{
        for(int i=0;i<m-1;i++){
            sum+=b[i];
        }
    }
    int Sum=0;
    Sum=sum+d;
    printf("%d",Sum);
    return 0;
}
查找指定字符
#include<stdio.h>
#include<string.h>
int main(){
    char a[81];
    char x;
    scanf("%c",&x);
        getchar();
gets(a);
    int tmp=-1;
    int n=strlen(a);
    for(int i=0;i<n;i++){
        if(a[i]==x)tmp=i;
    }
    if(tmp==-1) printf("Not Found");
    else printf("index = %d",tmp);
    return 0;
}
字符串逆序
#include<stdio.h>
#include<string.h>
int main(){
    char a[81];
    gets(a);
    int n=strlen(a);
    for(int i=n-1;i>=0;i--){
        printf("%c",a[i]);
    }return 0;
}
选择法排序
#include<stdio.h>
int main(){
    int n;
    int a[10];
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d ",&a[i]);
    }
    int tmp=0;int b;
    for(int i=0;i<n;i++){
        tmp=i;
        for(int j=i+1;j<n;j++){
            if(a[tmp]<a[j])tmp=j;
        }
       b=a[i];
        a[i]=a[tmp];
        a[tmp]=b;
    }
    for(int i=0;i<n;i++){
        if(i==0){
            printf("%d",a[i]);
}else printf(" %d",a[i]);
        }
    return 0;
}
求一批整数中出现最多的个位数字
#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    int a[10]={0};
    int number;
    for(int i=1;i<=n;i++){
        scanf("%d",&number);
        if(number==0)a[0]++;
        while(number){
            a[number%10]++;
            number/=10;
        }
}
    int max=a[0];
    for(int i=1;i<10;i++){
        if(max<a[i])max=a[i];
}
    printf("%d:",max);
    for(int i=0;i<10;i++){
        if(max==a[i])printf(" %d",i);
    }
    return 0;
}
判断上三角矩阵
#include<stdio.h>
int main(){
    int T;
    scanf("%d",&T);
    int n;int a[10][10];
    for(int i=1;i<=T;i++){
        scanf("%d",&n);
        for(int j=0;j<n;j++){
            for(int k=0;k<n;k++){
                scanf("%d",&a[j][k]);
}
        }int c=0;
        for(int j=0;j<n;j++){
            for(int k=0;k<n;k++){
                if(j>k){
                    if(a[j][k]==0)c++;
                }
            }
}if(c==n*(n-1)/2)printf("YES\n");
        else printf("NO\n");
    }return 0;
}
求矩阵各行元素之和
#include<stdio.h>
int main(){
    int m,n;
    int a[6][6];
    scanf("%d %d",&m,&n);
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
    scanf("%d",&a[i][j]);
}
}
    int b[6];int sum;
    for(int i=0;i<m;i++){
        sum=0;
        for(int j=0;j<n;j++){
            sum+=a[i][j];
        }
        b[i]=sum;
}
    for(int i=0;i<m;i++){
        printf("%d\n",b[i]);
}return 0;
}
找鞍点
#include<stdio.h>
int main(){
    int n;
    int a[6][6];
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    int falt=0;int b;int c;int d;int m=0;
    for(int i=0;i<n;i++){
        b=a[i][0];
        for(int j=0;j<n;j++){
            if(b<=a[i][j]){
                b=a[i][j];
         d=i;       c=j;         }
        }int k;
        for( k=0;k<n;k++){
            if(b>a[k][c])break;
        }
        if(k==n)falt=1;
            if(falt==1){printf("%d %d",d,c);
                 falt=0;
              m++;         }
    }
 if(m==0)printf("NONE");
    return 0;
}
统计大写辅音字母
#include<stdio.h>
#include<string.h>
int main(){
    char a[81];
    gets(a);
    int c=0;
    int n=strlen(a);
    for(int i=0;i<n;i++){
        if(a[i]>'A'&&a[i]<='Z'){
            if(a[i]!='E'&&a[i]!='I'&&a[i]!='O'&&a[i]!='U'){
                c++;
            }
        }
}printf("%d",c);
    return 0;
}
字符串替换
#include<stdio.h>
#include<string.h>
int main(){
    char a[81];
    gets(a);
    int n=strlen(a);
    for(int i=0;i<n;i++){
        if(a[i]>='A'&&a[i]<='Z'){
            a[i]='A'+'Z'-a[i];
        }
    }
    puts(a);
    return 0;
}
字符串转换成十进制整数
#include<stdio.h>
#include<math.h>
int zhuanhuan(char ch){
    if(ch>='A'&&ch<='F')return ch-'A'+10;
    else if(ch>='a'&&ch<='f')return ch-'a'+10;
    else if(ch>='1'&&ch<='9')return ch-'0';
    else return 0;
}
int main(){
    char a[80];
    gets(a);
    int sum=0;int falt =0;
    int x=0;int b[80];
    for(int i=0;a[i]!='#';i++){
    if(zhuanhuan(a[i])){
        b[x]=zhuanhuan(a[i]);
                x++;
    }
    if(a[i]=='-'&&x==0)falt=1;
}    int k=0;
    for(int j=x-1;j>=0;j--){
         sum+=b[k]*pow(16,j);
        k++;
        }
    if(falt)sum=-sum;
    printf("%d",sum);
    return 0;}

字符串排序
#include<stdio.h>
#include<string.h>;
int main(){
    int a[5][81];
    for(int i=0;i<5;i++){
        scanf("%s",&a[i]);
    }int b[81];
    for(int i=0;i<4;i++){
        for(int j=i+1;j<5;j++){
            if(strcmp(a[i],a[j])>0){
strcpy(b,a[i]);
                strcpy(a[i],a[j]);
                strcpy(a[j],b);
            }
        }
    }printf("After sorted:\n");
    for(int i=0;i<5;i++){
        printf("%s\n",a[i]);
    }
    return 0;
}
输出学生成绩
#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    double a[n];
    for(int i=0;i<n;i++){
        scanf("%lf",&a[i]);
    }
    double average;
    double max,min;
    double sum=0;
    max=a[0];
    min=a[0];
    for(int i=0;i<n;i++){
        sum+=a[i];
        if(max<a[i])max=a[i];
        if(min>a[i])min=a[i];
    }
    average=sum*1.0/n;
    printf("average = %.2f\nmax = %.2f\nmin = %.2f\n",average,max,min);
    return 0;
}
时间换算
#include<stdio.h>
int main(){
    int h,m,s;
    int x;
    scanf("%d:%d:%d",&h,&m,&s);
    scanf("%d",&x);
    s+=x;
    if(s>=60){
        if(m==59){
            h+=1;
            m=0;
            s-=60;
        }else{
            m+=1;
            s-=60;
        }
    }
    if(h>=24)h-=24;
    printf("%02d:%02d:%02d",h,m,s);
    return 0;
}
平面向量加法
#include<stdio.h>
int main(){
    double x1,x2,y1,y2;
    scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
    double x,y;
    x=x1+x2;
    y=y1+y2;
    if(fabs(x)<0.05)x=0.0;
    if(fabs(y)<0.05)y=0.0;
    printf("(%.1f, %.1f)",x,y);
    return 0;
}
查找书籍
#include <stdio.h>
#include <stdlib.h>
 
struct book{
    char name[100];
    double price;
};
int main(void)
{
    int i,n;
    int max=0,min=0;
    struct book a[100];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("\n");
        gets(a[i].name);
        scanf("%lf",&a[i].price);
    }
    for(i=0;i<n;i++)
    {
        if(a[i].price<a[min].price)
        {
            min=i;
        }
        if(a[i].price>a[max].price)
        {
            max=i;
        }
    }
    printf("%.2f, %s\n",a[max].price,a[max].name);
        printf("%.2f, %s\n",a[min].price,a[min].name);
    return 0;
}
通讯录排序
#include<stdio.h>
struct fri                      //本来这里想用friend,但一直报错,后来才知道这是一种交友元的函数
{
    char name[10];
    int brithday;
    char number[17];
}a[10],t;
int main()
{
    int n,i,j;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%s %d %s",a[i].name,&a[i].brithday,a[i].number);     //由于name,number是数组名称代表了地址,因此可以不用&
    }
    //选择排序
    for(i=0;i<n-1;i++){
        for(j=i;j<n;j++){
            if(a[i].brithday>a[j].brithday){
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        }
    }
    for(i=0;i<n;i++){
        printf("%s %d %s\n",a[i].name,a[i].brithday,a[i].number);
    }
}
坚持的力量
#include<stdio.h>
#include<math.h>
int main()
{
    double initial,factor,result;
    int day;
    scanf("%lf %lf %d",&initial,&factor,&day);
    result=initial*pow((1+factor),day);
    printf("result = %.2lf",result);
    return 0;
}
大家一起来玩游戏
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double num[4];
int result=24;
double precision=1e-6;
int test(int n)
{
    int i,j;
    if(n==1)
    {
        if(fabs(num[0]-result)<precision)
            return 1;
        else
            return 0;
    }
    for(i=0; i<n; i++)
        for(j=i+1; j<n; j++)
        {
            double a,b;
            a=num[i];
            b=num[j];
            num[j]=num[n-1];
            num[i]=a+b;
            if(test(n-1))
                return 1;
            num[i]=a-b;
            if(test(n-1))
                return 1;
            num[i]=b-a;
            if(test(n-1))
                return 1;
            num[i]=a*b;
            if(test(n-1))
                return 1;
            num[i]=a/b;
            if(test(n-1))
                return 1;
            num[i]=b/a;
            if(test(n-1))
                return 1;
            num[i]=a;
            num[j]=b;
        }
    return 0;
}
int main()
{
    int flag=0;
    int n;
    scanf("%d",&n);
    while(n--)
    {
        int i;
        for(i=0; i<4; i++)
            scanf("%lf",&num[i]);
        if(!flag)
        {
            if(test(4)==1)
                printf("True");
            else
                printf("False");
            flag=1;
        }
        else
        {
            if(test(4)==1)
                printf(" True");
            else
                printf(" False");
        }
    }
    return 0;
}
特殊约瑟夫问题
#include<stdio.h>
#include<string.h>
int main()
{
    int n, m, k;
    scanf("%d%d%d", &n, &m, &k);                    //获取数据
    
                                                //exist用来存储玩家是否被出局,pointer表示指到的小朋友
    int pointer = 1, exist[n + 1];
                                                      // flag用于下方,用于标识这次是顺时针报数还是逆时针
                                                    // 由于小朋友们按照顺时针排序,所以在此-1表示逆时针,1标识顺时针.
    int flag = -1;  
                                                                    // 初始化所有小朋友的状态为未出局.
    for (int i = 0; i <= n; i++) {exist[i] = 1;}
                                                        // 第0个数据用来记录现在还没出局的小朋友数
    exist[0] = n;
    for (; exist[0];flag *= -1)
    {
                                                        // temp用来存储本次出局要报数的个数
        int temp;  
        if (flag == -1) temp = m - 1;
        else temp = k - 1;
        while (temp)
        {
                                                          // 指向下一位,不考虑出局与否
            pointer += flag;
                                                                  // 环形
            if (pointer < 1) pointer = n;  
            else if (pointer > n) pointer = 1;
 
                                                                  // -=小朋友是否出局
                                                              // 如果小朋友出局的话那么就-0,相当于跳过这位小朋友
            temp -= exist[pointer];
        }
        printf("%d ", pointer);
        exist[0]--;                           //每出局一个,人数减少1
        exist[pointer] = 0;                   // 更新他的存活状态
    }
    return 0;
}
分数统计
#include<stdio.h>
#include<stdlib.h>
#define max_std 1000001
#define max_score 1001
//应用到桶排序的方法
int stu[max_std];      //定义一个存储学生分数的数组
int score[max_score];  //定义一个记录分数出现次数的数组
 
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)   //将学生i的分数读入stu数组
    {
        scanf("%d",&stu[i]);
        score[stu[i]]++;    //同时在score对相应的分数出现的次数加一
    }
    for(int i=1;i<=max_score;i++)
    {
        score[i]+=score[i-1];   //遍历,记录每个分数以下的其他分数出现的次数,
    }                           //也就是记录每个分数以下的学生的人数
    for(int i=1;i<=n;i++)
    {
        printf("%d ",score[stu[i]-1]);
        /*由上一个for循环的操作可知:欲得到该比某分数低的人数为多少,只需得知
        该分数减一的分数(该分数的上一个分数)出现的次数即可*/
    }
}
判断一个三位数是否为水仙花数
#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int a,b,c;
    if(n>=100&&n<=999)
    {
        a=n/100; //百位
        b=(n%100)/10; //十位
        c=n%10;    //个位
        if(n==a*a*a+b*b*b+c*c*c) 
        {
            printf("Yes");
        }
        else
        {
            printf("No");
        }    
    }
    else
    {
        printf("Invalid Value.");
    }
    
    return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值