OJ程序设计实训

这篇博客介绍了在线编程挑战中的几道题目,包括Alice和Bob的骰子游戏策略、矩阵转置、任务调度和字符串哈希等算法问题,涉及概率计算、矩阵操作和数据结构应用。
摘要由CSDN通过智能技术生成

1、ASCII


#include<stdio.h>int main(){
   
    char ch;
    int a=0,b=0;
    while((ch=getchar())!=EOF)
    {
           
        if(b==0)
        {
   
            printf("%05X",a);                        
            printf(" %02X",ch);
        }    
        if(b!=0&&b<16)
        {
   
            printf(" %02X",ch);                
        }b++;        
        if(b==16)
        {
   
            b=0;
            a++;
            printf("\n");
        }
        
    }    }

2、染色

#include<stdio.h>int a[105],b[105];int main(){
   
    int t,m,n,k;
    scanf("%d",&t);
    while(t--)
    {
   
        scanf("%d%d%d",&m,&n,&k);
        int x,y;
        int visa=0,visb=0;
        for(int i=0;i<105;i++)
        {
   
            a[i]=0;
            b[i]=0;
        }
        while(k--)
        {
   
            scanf("%d%d",&x,&y);
            if(a[x]==0)
            {
   
                a[x]=1;
                visa++;
            }
            if(b[y]==0)
            {
   
                b[y]=1;
                visb++;
            }
        }
        printf("%d\n",m*n-visa*visb);
    }
return 0;}

3、Bob’s Password

#include<stdio.h>#include<string.h>#include<stdlib.h>#include <iostream>using namespace std;int main(){
   
    int t;
    scanf("%d",&t);
    int a[9][9]={
   0,1,0,1,1,1,0,1,0,
                     1,0,1,1,1,1,1,0,1,
                     0,1,0,1,1,1,0,1,0,
                     1,1,1,0,1,0,1,1,1,
                     1,1,1,1,0,1,1,1,1,
                     1,1,1,0,1,0,1,1,1,
                     0,1,0,1,1,1,0,1,0,
                     1,0,1,1,1,1,1,0,1,
                     0,1,0,1,1,1,0,1,0};
    int b[100];
    while(t--){
   
        string s;
        cin>>s;
        int flag = 1;
        int len = s.length();
        memset(b,0,sizeof(b));
        for(int i = 0;i < len-1;i++){
   
            if(a[s[i]-'1'][s[i+1]-'1']==1){
   
                b[s[i]-'1'] = 1;
            }
            else{
   
                if(b[(s[i]+s[i+1]-2*'1')/2]==1)
                {
   
                    b[s[i]-'1'] = 1;
                }
                else
                {
   
                    flag = -1;
                    break;
                }
            }
        }
        if(flag==1)
           puts("Yes");
        else
            puts("No");
}}

4、Alice and Bob
输入
第一行输入一个整数K,表示游戏的次数。 以后每两行表示一个样例,第一行是Alice骰子的点数。第二行是Bob骰子的点数。
输出
如果是Alice赢,输出"Alice",如果是Bob赢,输出"Bob",否则输出"Draw"。

#include <stdio.h>
int main()
{
   
    int ct;
    scanf("%d",&ct);
    while(ct--)
    {
   
        int a,b,c,k=2,A=0,B=0,cot=0;
        while(k--){
   
            scanf("%d %d %d",&a,&b,&c);
            int ai=a,bi=b,ci=c;
            if(a==1) a=16;
            if(b==1) b=16;
            if(c==1) c=16;
            if(a==b&&b==c)
            {
       
                cot=a*1000;
            }
            else if(a==b)
            {
   
                cot=a*100+c;
            }
            else if(a==c)
            {
   
                cot=a*100+b;
            }
            else if(b==c)
            {
   
                cot=b*100+a;
            }
            else
            {
       
                cot=ai+bi+ci;
            }
            if(k==1)
                A=cot;
            else
                B=cot;
        }
        if(A>B)
            printf("Alice\n");
        else if(A<B)
            printf("Bob\n");
        else
            printf("Draw\n");
    }
    return 0;
}

5、矩阵转置就是把原矩阵A的所有元素aij转成矩阵B的bji。 现实中,大部分的矩阵都是稀疏的,所以,存储矩阵时,我们可以只存储存储每个非零元素的坐标和值,并且按行优先排序。

#include <stdio.h>
int a[10001], b[10001], c[10001];
int va[10001], vb[10001], vc[10001];
int main() 
{
   
  int t;
  scanf("%d", &t);
  while (t--) 
  {
   
    int n, m, k,i,j;
    scanf("%d%d%d", &n, &m, &k);
    for (i = 0; i < k; ++i) 
       scanf("%d%d%d", &a[i], &b[i], &c[i]);
    int t = 0;
    for (i = 0; i < m; ++i) {
   
      for (j = 0; j < k; ++j) {
   
        if (b[j] == i) {
   
          va[t] = b[j];
          vb[t] = a[j];
          vc[<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值