第十五届题目

握手问题

cs 复制代码
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int sum=0;
  for(int i=49;i>=7;i--)
  {
    sum+=i;
  }
  printf("%d",sum);
  return 0;
}

小球反弹

cs 复制代码
#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[])
{
  long long t=1,x=343720,y=233333;
  while(1)
  {
    if((15*t)%x==0&&(17*t)%y==0) break;
    t++;
  }
  printf("%.2f",2*sqrt(15*15*t*t+17*17*t*t));
  return 0;
}

好数

cs 复制代码
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int n;
  scanf("%d",&n);
  int cnt=0;
  for(int i=1;i<=n;i++)
  {
    int a[10000005];
    int idx=1;
    int t=i;
    while(t)
    {
      a[idx++]=t%10;
      t/=10;
    }
    int flag=1;
    for(int j=1;j<=idx;j++)
    {
      if(j%2==1)
      {
        if(a[j]%2==0)
        {
          flag=0;
          break;
        } 
      }
      else 
      {
        if(a[j]%2==1)
        {
          flag=0;
          break;
        }
      }
    }
    if(flag) cnt++;
  }
  printf("%d",cnt);
  return 0;
}

R 格式

cs 复制代码
#include <stdio.h>
#include <math.h>
#include <string.h>

#define MAX 2000

int main(int argc, char *argv[])
{
  int n;
  char d[1025];
  int b[MAX]={0};
  int b_len=0;
  int sum=0,k=0;
  int i;
  scanf("%d %s",&n,d);
  for(int i=strlen(d)-1;i>=0;i--)
  {
    if(d[i]!='.')
    {
      if(b_len<MAX)
      {
        b[b_len]=d[i]-'0';
        b_len++;
      }
    }
    else k=sum;
    sum++;
  }
  for(int i=0;i<n;i++)
  {
    int carry=0;
    for(int j=0;j<b_len;j++)
    {
      b[j]=b[j]*2+carry;
      if(b[j]>=10)
      {
        carry=b[j]/10;
        b[j]=b[j]%10;
      }
      else carry=0;
    }
    if(carry)
    {
      if(b_len<MAX)
      {
        b[b_len]=carry;
        b_len++;
      }
    }
  }
  if(k>0&&b[k-1]>=5)
  {
    int carry=1;
    for(i=k;i<b_len;i++)
    {
      b[i]=b[i]+1;
      if(b[i]<=9)
      {
        carry=0;
        break;
      }
      else b[i]-=10;
    }
    if(carry)
    {
      if(b_len<MAX)
      {
        b[b_len]=1;
        b_len++;
      }
    }
  }
  for(i=b_len-1;i>=k;i--)
  {
    printf("%d",b[i]);
  }
  return 0;
}

宝石组合

cs 复制代码
#include <stdio.h>
#include <string.h>

#define N 500010

int gem[N];
int num[N];

int main(int argc, char *argv[])
{
  int n;
  scanf("%d",&n);
  int max=-0x3f3f3f3f;
  for(int i=0;i<n;i++)
  {
    scanf("%d",&gem[i]);
    num[gem[i]]++;
    if(gem[i]>max) max=gem[i];
  }
  for(int i=max;i>=1;i--)
  {
    int tmp[3];
    int pos=0;
    int cnt=0;
    for(int j=i;j<=max;j+=i)
    {
      if(num[j])
      {
        cnt+=num[j];
        for(int k=0;k<num[j]&&pos<3;k++)
        {
          tmp[pos++]=j;
        }
      }
      if(cnt>=3) break;
    }
    if(cnt>=3)
    {
      for(int j=0;j<3;j++)
      {
        printf("%d ",tmp[j]);
      }
      printf("\n");
      break;
    }
  }
  return 0;
}

数字接龙

cs 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int n,k;
int g[11][11];
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1,1,1,0,-1,-1,-1};

char path[121];
int path_len=0;

int st[11][11];
int edge[11][11][11][11];

int dfs(int a,int b)
{
  if(a==n-1&&b==n-1) 
  {
    return path_len==n*n-1;
  }
  st[a][b]=1;
  for(int i=0;i<8;i++)
  {
    int x=a+dx[i],y=b+dy[i];
    if(x<0||x>=n||y<0||y>=n) continue;
    if(st[x][y]) continue;
    if(g[x][y]!=(g[a][b]+1)%k) continue;
    if(i%2&&(edge[a][y][x][b]||edge[x][b][a][y])) continue;
    edge[a][b][x][y]=1;
    path[path_len++]=i+'0';
    if(dfs(x,y)) return 1;
    path_len--;
    edge[a][b][x][y]=0;
  }
  st[a][b]=0;
  return 0;
}

int main(int argc, char *argv[])
{
  scanf("%d %d",&n,&k);
  for(int i=0;i<n;i++)
  {
    for(int j=0;j<n;j++)
    {
      scanf("%d",&g[i][j]);
    }
  }
  memset(st,0,sizeof(st));
  memset(edge,0,sizeof(edge));
  path_len=0;
  if(!dfs(0,0)) printf("-1\n");
  else 
  {
    path[path_len]='\0';
    printf("%s\n",path);
  }
  return 0;
}

拔河

cs 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define N 1004

typedef long long ll;

ll min(ll a,ll b)
{
  return a<b?a:b;
}

ll abs_ll(ll x)
{
  return x<0?-x:x;
}

int main() {
  int n;
  scanf("%d",&n);
  ll a[N];
  for(int i=1;i<=n;i++)
  {
    scanf("%lld",&a[i]);
  }
  ll ans=1e14;
  for(int l=1;l<=n;l++)
  {
    for(int r=n;r>l;r--)
    {
      int i=l,j=r;
      ll sum1=a[i],sum2=a[j];
      ans=min(ans,abs_ll(sum1-sum2));
      if(ans==0)
      {
        printf("0");
        return 0;
      }
      while(i+1<=j)
      {
        if(sum1==sum2)
        {
          printf("0");
          return 0;
        }
        if(sum1>sum2)
        {
          j--;
          sum2+=a[j];
        }
        else if(sum1<sum2)
        {
          i++;
          sum1+=a[i];
        }
        ans=min(ans,abs_ll(sum1-sum2));
      }
    }
  }
  printf("%lld",ans);
  return 0;
}
相关推荐
测试修炼手册2 小时前
[测试工具] 用 Codex 做测试实战:从需求分析到自动化用例落地
运维·自动化·需求分析
Dlrb12112 小时前
C语言-指针三
c语言·算法·指针·const·命令行参数
米高梅狮子2 小时前
03.网络类服务实践
linux·运维·服务器·网络·kubernetes·centos·openstack
June`2 小时前
网络编程时内核究竟做了什么???
linux·服务器·网络
Tisfy2 小时前
LeetCode 2540.最小公共值:双指针(O(m+n))
算法·leetcode·题解·双指针
IronMurphy2 小时前
【算法四十七】152. 乘积最大子数组
算法
楼兰公子3 小时前
RK3588 + Linux7.0.3 网络工程调试错误速查手册
linux·网络·3588
Elnaij3 小时前
Linux系统与系统编程(9)——自设计shell与基础IO
linux·服务器
IpdataCloud3 小时前
稳定的企业级IP数据接口怎么选?可用性指标+离线库高可用方案
运维·网络·tcp/ip
WebGIS开发3 小时前
地信职业百科②:GIS运维
运维·gis·就业·转行