⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 polya.cpp

📁 acm 常用算法和代码库
💻 CPP
字号:
#include <memory.h>
#include <math.h>
#include <iostream>
using namespace std;

int ploya1(int c,int n)//旋转和翻转视为相同
{
       int b1[10000];
       int b2[10000];
       int i,j,k,x,y;
       int t=0;
       memset(b1,0,sizeof(b1));
       memset(b2,0,sizeof(b2));
       for (i=0;i<=n-1;i++)
       {
             for (x=y=j=0;j<=n-1;j++)
             {
                   if (!b1[(i+j)%n])
                         for (x++,k=(i+j)%n;!b1[k];k=(i+k)%n)
                               b1[k]=true;
                   if (!b2[n-1-(i+j)%n])
                         for (y++,k=n-1-(i+j)%n;!b2[k];k=n-1-(i+k)%n)
                               b2[k]=true;
             }
             t=t+pow(c,x)+pow(c,y);
       }
       return t/(2*n);
}

double ploya2(int c,int n)//旋转视为相同,翻转为异
{
       int bj[10000];
       int i,j,k,x,y;
       double t=0.0;
      
       for (i=0;i<=n-1;i++)
       { 
             memset(bj,0,sizeof(bj));
             for (x=y=j=0;j<=n-1;j++)
                   if (!bj[(i+j)%n])
                         for (x++,k=(i+j)%n;!bj[k];k=(i+k)%n)
                               bj[k]=true;
             t=t+pow(c,x);
       }
       return t/n;
}

double ploya3(int c,int n)//翻转视为相同,旋转为异
{
       int x=n/2;
       if (n%2)       x++;
       return (pow(c,n)+pow(c,x))/2;
}



int main()
{
    int a;
    double res;
    
    
    while(cin>>a)
    cout<<ploya2(3,a)<<endl;
    system("pause");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -