解题报告-南阳理工学院16级新生十一检测

感谢软件学院王明轩与倪乾栋两位学长提供NSWOJ

A - 爱数星星的学姐

感谢衡圆圆学姐出题
方法一:用一维字符串数组接收N次,每次接收数据都遍历一遍数组统计星星数量

方法二:二维字符串数组接收全部数据,然后遍历二维字符串数组

#include<stdio.h>
#include<string.h>
int main()
{
    char a[210][210];
    int m,n,i,j;
    while(~scanf("%d %d",&n,&m))
    {
        getchar();
        if(n==0&&m==0)
            break;
        int k=0;
        for(i=0; i<n; i++)
        {
            for(j=0; j<m; j++)
                scanf("%c",&a[i][j]);
            getchar();
        }
        for(i=0; i<n; i++)
            for(j=0; j<m; j++)
            {
                if(a[i][j]=='*')
                    k++;
            }
        printf("%d\n",k);
    }
    return 0;
}

B - 矩阵中的最大值

感谢肖莎莎学姐出题

方法一:用一维数组接收N次,每次记录接收数据中的最大值

方法二:二维数组接收数据,两层for循环遍历一遍二维数组同时记录最大值

#include<stdio.h>
int a[1005][1005];
int main()
{
    int t;
    int n,m;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d",&n,&m);
        int max=-0x3f3f3f3f;
        int a1,b1,i,j;
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=m;j++)
            {
                scanf("%d",&a[i][j]);
                if(a[i][j]>max)
                {
                    max=a[i][j];
                    a1=i;
                    b1=j;
                }
            }
        }
        printf("%d %d\n",a1,b1);
    }
    return 0;
}

C - WY的伪冒泡排序

感谢自己出题

签到题,坑点在于给的是实数,并要求保留两位小数,用float或者double类型就好

#include<stdio.h>
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        double X,Y,Z,T;//说了是实数,当然用double或者float了
        scanf("%lf%lf%lf",&X,&Y,&Z);
        if(X>Y)
        {
           T=X;
           X=Y;
           Y=T;
        }
        if(X>Z)
        {
            T=X;
            X=Z;
            Z=T;
        }
        if(Y>Z)
        {
            T=Y;
            Y=Z;
            Z=T;
        }
        printf("%.2lf %.2lf %.2lf\n",X,Y,Z);
    }
    return 0;
}

D - WXZ的下标游戏

感谢王小珍学姐出题
对于给出的N个数,把这些数作为数组下标,他们对应的序号作为数组内的值
例如给出三个数5 9 4,他们的序号分别是1 2 3,对数组num[]这样赋值:num[5]=1,num[9]=2,num[4]=3。接着M次查询,如果想查询X的序号,直接输出num[X]即可

#include<stdio.h>
int main()
{
    int n,m;
    int a[100],c[100];
    while(scanf("%d",&n)!=-1)
    {
        if(n==0)
            break;
        scanf("%d",&m);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        for(int i=1;i<=m;i++)
        {
            int b;
            scanf("%d",&b);
            for(int j=1;j<=n;j++)
            {
                if(a[j]==b)
                {
                    c[i]=j;
                }
            }
        }
        for(int i=1;i<=m;i++)
            printf("%d ",c[i]);
        printf("\n");
    }
}

E - 回文串判断2

感谢吴荣学长出题
思路都在注释里

#include<stdio.h>
#include<string.h>
int main()
{
    int N;
    scanf("%d",&N);
    while(N--)
    {
        char str[1005];
        scanf("%s",str);
        int len=strlen(str);
        int left=0;//字符串左端下标
        int right=len-1;//字符串右端下标
        int flag=1;//是回文串
        while(left<len&&right>=0)//循环条件:下标未越界
        {
            if(str[left]==str[right])//如果两个字符相等
            {
                left++;//左端向右移
                right--;//右端向左移
            }
            else//遇到两个字符不相等
            {
                flag=0;//标记为不是回文串
                break;//结束循环
            }
        }
        if(flag)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}

F - A simple problem created by GM

感谢耿曼学姐出题

头文件看不懂?sort不知道是什么?
没关系,把你看不懂的头文件都删掉,sort换成冒泡排序
还不会?没关系,这题本来就是防AK的,毕竟编程都才入门一周

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a[105];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        int num=0;
        scanf("%d",&n);
        for(int i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
            if(a[i]%2!=0)
            {
                num++;
            }
        }
        a[n]=num;
        sort(a,a+n+1);
        printf("%d",a[0]);
        for(int i=1; i<=n; i++)
        {
            if(a[i]!=a[i-1])
                printf(" %d",a[i]);
        }
        printf("\n");
    }
}

G - ZP的汽车调度

感谢张盼学长出题
此题防AK,果然模拟大法好

#include<stdio.h>
#include<math.h>
#include<string.h>
#define PI 3.1415927
int main()
{
    int ncase;
    scanf("%d",&ncase);
    while(ncase--)
    {
        int a[5][100],x;//第一个下标代表车站编号,第二个下标代表每个车站中车的编号有为1没有为0
        memset(a,0,sizeof(a));
        char b;
        for(int i=0; i<5; i++)
            for(int j=0; j<2; j++)
            {
                scanf("%d",&x);//把输入的汽车编号赋值为1;
                a[i][x]=1;
            }
        int m;
        scanf("%d",&m);
        while(m--)
        {
            getchar();
            scanf("%c",&b);
            int c,d,e;
            scanf("%d%d%d",&c,&d,&e);
            if(b=='p')//e从d到c
                a[d][e]=0,a[c][e]=1;//开出赋值为0,开进赋值为1
            else//e从c到d
                a[c][e]=0,a[d][e]=1;
        }
        for(int i=0; i<5; i++)//扫描每一个车站
        {
            for(int j=0; j<100; j++)//扫一遍不为0的就代表有这辆车,输出编号,否则不输出。
                if(a[i][j])
                    printf("%d ",j);
            printf("\n");
        }
        printf("\n");
    }
    return 0;
}

H - WY的另类乘法

为了降低难度,都说了是两个三位数,拆开加一块再乘就可以了
不会拆数的话去做水仙花数

#include<stdio.h>
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int N,M;
        scanf("%d%d",&N,&M);
        printf("%d\n",(N%10+N%100/10+N/100)*(M%10+M%100/10+M/100));
    }
    return 0;
}

I - GLaDOS的日期计算

感谢李朝强学长出题

另一个版本的日期计算
判断闰年,逐月累加即可
标程采用模块化编程,写了两个自定义函数
看不懂没关系,我们有百度啊

#include<stdio.h>
int judge(int year)
{
    if(year%4==0&&year%100!=0||year%400==0)
        return 1;
    return 0;
}
int days(int year,int month)
{
    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
        return 31;
    if(month==2)
    {
        if(judge(year))
            return 29;
        return 28;
    }
    return 30;
}
int main()
{
    int year,beginmonth,beginday,endmonth,endday;
    while(scanf("%d%d%d%d%d",&year,&beginmonth,&beginday,&endmonth,&endday)!=EOF)
    {
        int sum=0,i;
        if(beginmonth==endmonth)
            sum=endday-beginday+1;
        else
        {
            sum+=days(year,beginmonth)-beginday+1;
            sum+=endday;
            for(i=beginmonth+1;i<endmonth;i++)
                sum+=days(year,i);
        }
        printf("%d\n",sum);
    }
}

J - 饥渴的lzq学长

不感谢虽然出题但是恶意攻击lzp的刘玉强
这模拟对新生还是挺难

#include<stdio.h>
int main()
{
  int t,n,num;
  char str[5];
  scanf("%d",&t);
  while(t--)
  {
      scanf("%d",&n);
      int ma=0,mi=100000;
      int sum=0;
      for(int i=0;i<n;i++)
      {
          scanf("%s%d",str,&num);
          if(ma<num) ma=num;
          if(num<mi) mi=num;
          sum+=num;
      }
      printf("%d %d",ma,mi);
      if(n!=16) printf("\nTotal number of girls can not be determined!\n");
      else printf(" %d\n",sum);
  }
  return 0;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值