几道浙大acm题代码

1.Beautiful Meadow

#include<iostream.h>

bool dothework(int *a,int m,int n)
{
    int j;
 if(n>1)
  for(j=0;j<m;j++)
  {
   int i;
   for(i=0;i<n-1;i++)
    if(!(*(a+i+j*n)))
     if(*(a+i+j*n)==*(a+i+j*n+1))
      return false;
  }
    int i;
 if(m>1)
  for(i=0;i<n;i++)
   for(j=0;j<m-1;j++)
    if(!(*(a+j*n+i)))
     if(*(a+j*n+i)==*(a+(j+1)*n+i))
      return false;
 for(j=0;j<m;j++)
  for(i=0;i<n;i++)
   if(!(*(a+j*n+i)))
    return true;
 return false;
}

int main()
{
 int m=1;
 int n=1;
 int *p1;
 bool data;
 while(1)
 {
  cin>>m>>n;
  if(!m&&!n)
   break;
  p1=new int[m*n];
  int i;
  for(i=0;i<m*n;i++)
   cin>>*(p1+i);
  data=dothework(p1,m,n);
  if(data)cout<<"Yes"<<'/n';
  else cout<<"No"<<'/n';
  delete []p1;
 }
 
    return 0;

}

 

2.Big String Outspread

#include<iostream.h>
#include<string.h>

struct Start{
 int num;
 int begin;
};

char **p;

void DoWork(char a[250],int num)
{
 char b[200000];
 int d=0;
 int num1=0,begin,end,times;
 int s[4];
 int temp,j,k;
 Start start[100];
 int i;
 for(i=0;i<num;i++)
 {
  if(a[i]>='1'&&a[i]<='9')
  {
   int ti=i;
   s[0]=a[i]-'0';
   int t;
   for(t=1;t<4;t++)
    if(a[ti+t]>='0'&&a[ti+t]<='9')
    {
     s[t]=a[ti+t]-'0';
     i++;
    }
    else
     break;
   switch(t){
   case 1:temp=s[0];break;
   case 2:temp=s[0]*10+s[1];break;
   case 3:temp=s[0]*100+s[1]*10+s[2];break;
   case 4:temp=s[0]*1000+s[1]*100+s[2]*10+s[3];break;
   default:break;
   }
   if(a[i+1]=='(')
   {
    start[num1].num=temp;
    start[num1++].begin=d;
    i++;
   }
   else
   {
    for(j=0;j<temp;j++)
     b[d++]=a[i+1];
    i++;
   }
  }
  else if(a[i]>='a'&&a[i]<='z'&&(!i||(a[i-1]>'9'||a[i-1]<'1')))
   b[d++]=a[i];
  else if(a[i]==')')
   {
    begin=start[num1-1].begin;
    times=start[num1-1].num;
    num1--;
    end=d;
    for(k=1;k<times;k++)
     for(j=begin;j<end;j++)
      b[d++]=b[j];
   }
 }
 b[d]='/0';
 static int step=0;
 p[step]=new char[d+1];
 strcpy(p[step],b);
 step++;
}

int main()
{
 int c;
 cin>>c;
 p=new char*[c];
 char temp;
 cin.get(temp);
 int i;
 for(i=0;i<c;i++)
 {
  char a[250];
  int num=0;
  while(1)
  {
   cin.get(temp);
   if(temp=='/n')
    break;
   a[num++]=temp;
  }
  DoWork(a,num);
 }
 for(i=0;i<c;i++)
 {
  cout<<p[i]<<endl;
  delete[]p[i];
 }
 delete[]p; 
 return 0;
}

3.Image Transformation

#include<iostream.h>

struct NodeColor{
 int color;
 NodeColor *next;
}*headOfColor=0,*pColorNow;

struct NodeCase{
 int xNum;
 NodeCase *next;
 NodeColor *pNodeColor;
}*headOfCase=0,*pCaseNow;

void AddNodeCase(int x)
{
 if(!headOfCase)
 {
  headOfCase=new NodeCase;
  pCaseNow=headOfCase;  
 }
 else
 {
  pCaseNow->next=new NodeCase;
  pCaseNow=pCaseNow->next;
 }
 pCaseNow->next=0;
 pCaseNow->xNum=x;
}

void AddNodeColor(int color)
{
 if(!headOfColor)
 {
  headOfColor=new NodeColor;
  pColorNow=headOfColor;
 }
 else
 {
  pColorNow->next=new NodeColor;
  pColorNow=pColorNow->next;
 }
 pColorNow->color=color;
 pColorNow->next=0;
}

void LinkCaseColor()
{
 pCaseNow->pNodeColor=headOfColor;
 headOfColor=0;
}

void Show()
{
 static int NumOfCase=1;
 if(!headOfCase)
  return;
 pCaseNow=headOfCase;
 do{
  cout<<"Case "<<NumOfCase<<':'<<'/n';
  NumOfCase++;
  pColorNow=pCaseNow->pNodeColor;
  do{
   for(int i=0;i<pCaseNow->xNum-1;i++)
   {
    cout<<pColorNow->color<<',';
    pColorNow=pColorNow->next;
   }
   cout<<pColorNow->color;
   pColorNow=pColorNow->next;
   cout<<'/n';
  }while(pColorNow);
  pCaseNow=pCaseNow->next;
 }while(pCaseNow);
}

void DltRoom()
{
 if(!headOfCase)
  return;
 pCaseNow=headOfCase;
 do{
  pColorNow=pCaseNow->pNodeColor;
  while(pColorNow)
  {
   NodeColor *temp;
   temp=pColorNow;
   pColorNow=pColorNow->next;
   delete temp;
  }
  NodeCase *temp;
  temp=pCaseNow;
  pCaseNow=pCaseNow->next;
  delete temp;
 }while(pCaseNow);
}

int main()
{
 int m,n,sum=0;
 int *pcolor[3];
 while(1)
 {
  cin>>m>>n;
  if(!m&&!n)
   break;
  int i;
  for(i=0;i<3;i++)
   pcolor[i]=new int[m*n];
  for(i=0;i<3;i++)
   for(int j=0;j<m*n;j++)
    cin>>*(pcolor[i]+j);
  AddNodeCase(n);
  for(i=0;i<m*n;i++)
  {
   for(int j=0;j<3;j++)
    sum+=*(pcolor[j]+i);
   AddNodeColor(sum/3);
   sum=0;
  }
  LinkCaseColor();
  for(i=0;i<3;i++)
   delete[]pcolor[i];
 }
 Show();
 DltRoom();
 return 0;
}
 

4.palindromes

#include "iostream"

using namespace std;

int main()
{
 char str[100000];
 int l,sum;
 int ji,ou,i;
 while(scanf("%s",str)!=EOF)
 {
  sum=0;
  for(i=0;str[i]!='/0';i++)
  {
   ji=1;
   ou=1;
   for(l=0;(i-l+1)>=0&&str[i+l]!='/0';l++)
   {
    if(str[i+l]==str[i-l]&&(i-l)>=0&&ji==1)
    {
     sum++;

    }
    else if((i-l)>=0)
     ji=0;
    if(str[i-l+1]==str[i+l]&&l>0&&ou==1)
    {
     sum++;
    }
    else if(l>0)
     ou=0;
   }
  }
  printf("%d/n",sum);
 }
 return 0;
}

 

5.Sum Up

#include<iostream.h>

struct node{
 int sum;
 node *next;
}*head=0,*pNow;

bool GetUnit(int c,int i)
{
 int multi=32768;
 for(int j=0;j<i;j++)
  multi/=2;
 return c/multi%2;
}

int GetNum(bool a[7])
{
 int sum=0;                                          
 int quan=1;
 for(int i=6;i>0;i--)
 {
  quan=1;
  for(int j=6;j>i;j--)
   quan*=2;
  sum+=a[i]*quan;
 }
 if(a[0])
  sum*=-1;
 return sum;
}

void AddNode(int sum)
{
 if(head==0)
 {
  head=new node;
  pNow=head;
  pNow->sum=sum;
  pNow->next=0;
  return;
 }
 pNow->next=new node;
 pNow=pNow->next;
 pNow->sum=sum;
 pNow->next=0;
}

int main()
{
 int *p;
 int c;
 while(1)
 {
  cin>>c;
  if(c==-1)
   break;
  p=new int[c];
  int i;
  for(i=0;i<c;i++)
   cin>>p[i];
  bool *pb;
  pb=new bool[16*c];
  for(i=0;i<c;i++)
  {
            int j;
   for(j=0;j<16;j++)
    pb[i*16+j]=GetUnit(p[i],j);
        }
  bool a[7];
  int Sum=0;
  for(i=0;i<16*c;i++)
  {
   a[i%7]=pb[i];
   if(i%7==6)
    Sum+=GetNum(a);
  }
  AddNode(Sum);
 }
 pNow=head;
 node *pTemp;
 while(1)
 {
  if(pNow==0)
   break;
  cout<<pNow->sum<<endl;
  pTemp=pNow;
  pNow=pNow->next;
  delete pTemp;
 }
 return 0;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值