NYIST_17软件_C语言测试 编程题题解

来源:互联网 发布:淘宝自动回复内容 编辑:程序博客网 时间:2024/05/16 08:42

代码形式解题思路不唯一 仅供参考


A:A+BI

#include <stdio.h>int a[36];int main(){    int n;    a[1] = 1 , a[2] = 1;    for(int i = 3 ; i <= 35 ; i ++)    {        a[i] = a[i-1] + a[i-2];    }    while(scanf("%d",&n)!=EOF)    {        printf("%d\n",a[n]*2);    }}



B:64的问题

只需判断最左边的1的右边有多少0,如果0的个数大于等于6即为Yes(注意需要判断是否全为零,例如:0000000)

#include <stdio.h>#include <string.h>char ch[1000000];int main(){    scanf("%s",ch);    int len = strlen(ch);    int flag = 0 , sum = 0;    for(int i = 0 ; i < len ; i++)    {        if(ch[i] == '1')        {            flag = 1;        }        if(flag && ch[i] == '0')        {            sum++;        }    }    if(flag&&sum>=6)    {        puts("Yes");    }    else     {        puts("No");    }}



C:字符串变换

模拟一下过程

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int main(){    int n, m, l, r;    char s[105], ll, rr;    scanf("%d%d", &n, &m);    cin >> s;    for (int i = 0; i < m; i ++) {        scanf("%d %d %c %c", &l, &r, &ll, &rr);        for (int i = l - 1; i <= r - 1; i ++) {            if (s[i] == ll) {                s[i] = rr;            }        }    }    cout << s << endl;}

D:A+BII


题上a,b之和范围最大超过unsigned long long 上限 特判一下即


#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int main(){    unsigned long long a,b;    scanf("%llu,%llu",&a,&b);    if(a == 9223372036854775807 && b == 9223372036854775809) printf("18446744073709551616\n");    else printf("%llu\n",a+b);    return 0;} 


E:三个人的象棋

每次判断当前步情况存在与否

#include<bits/stdc++.h>  using namespace std;  const int MAXN = 1e5 + 5;  int main()  {      int n,a[MAXN];       while(~scanf("%d",&n))      {          for(int i = 0; i < n; i++)          {              scanf("%d",&a[i]);          }          int p1 = 1, p2 = 2, flag = 1;          for(int i = 0; i < n; i++)          {              if(a[i] == p1) p2 = 6 - p1 - p2;              else if(a[i] == p2) p1 = 6 - p1 - p2;              else             {                  flag = 0; break;              }          }          if(flag) printf("YES\n");          else printf("NO\n");      }      return 0;  }


F:越努力越幸运

660-669中如果幸运的话猜到667就是对的 一个一个试

#include <stdio.h>int main(){    printf("%d",1328170476%665);}

G:ztt的问题


#include<stdio.h>  int main()  {      int n;      scanf("%d",&n);//n为奇数           //打印空心菱形上半个           for(int i=1;i<=n/2;i++)//行           {              for(int j=1;j<=(n-(i*2-1))/2;j++) printf("*");              for(int j=1;j<=i*2-1;j++)               {//控制空心                   if(j==1||j==i*2-1) printf(" ");                  else printf(" ");              }              for(int j=1;j<=(n-(i*2-1))/2;j++) printf("*");              printf("\n");          }          for(int i=1;i<=n;i++)          {//控制最中间               if(i==1||i==n) printf(" ");              else printf(" ");           }printf("\n");          //打印空心菱形下半个           for(int i=n/2;i>=1;i--)//行           {              for(int j=1;j<=(n-(i*2-1))/2;j++) printf("*");              for(int j=1;j<=i*2-1;j++)              {//控制空心                   if(j==1||j==i*2-1) printf(" ");                  else printf(" ");              }              for(int j=1;j<=(n-(i*2-1))/2;j++) printf("*");             printf("\n");          }             return 0;  }  



H:兔子

斐波那契数列 注意最后是兔子的只数不是对数

#include<bits/stdc++.h>using namespace std;const int MAXN = 1e5 + 5;int n, a[MAXN], cnt[MAXN];int main(){    a[1] = a[2] = 1;    for(int i = 3; i <= 35; i++)    {        a[i] = a[i - 1] + a[i - 2];    }    //for(int i = 1; i <= 35; i++) printf("%d ",a[i]*2);    int n;    scanf("%d",&n);    printf("%d\n",a[n] * 2);    return 0;}




 
原创粉丝点击