6261:汉诺塔问题

  • 查看
  • 提交
  • 统计
  • 提问

到底时间限制: 
1000ms

内存限制: 
65536kB

描述
盖19世纪最后,在欧州底商店中售卖一种植智力玩具,在相同片铜板上产生三根杆,最左边的杆上自上而下、由小到大顺序串在由64独圆盘构成的宝塔。目的是以最左边杆上的旋满变到中游的杆上,条件是同样潮只能挪一个盘,且未允大盘在小盘的面。 
随即是一个响当当的题目,几乎拥有的讲义及且有是题材。由于尺度是一模一样不成只能走一个转悠,且不允许大盘在小盘上面,所以64只转的运动次数是:18,446,744,073,709,551,615
即是一个天文数字,若每一样微秒可能算(并无出口)一赖活动,那么为亟需几一百万年。我们仅仅会找有题目的解决智并缓解较小N值时之汉诺塔,但生为难用微机解决64重叠的汉诺塔。 

要圆盘从小到不可开交编号也1, 2, …

输入
输入为一个整数后面与三只单词符字符串。
平头为盘子的数码,后三个字符表示三单杆子的号。

输出
出口每一样步移动盘子的记录。一软走一行。
老是运动的笔录也例如 a->3->b
的款式,即把号码也3底物价指数从a杆移至b杆。

样例输入
2 a b c

样例输出
a->1->c
a->2->b
c->1->b

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 using namespace std;
 5 int tot=0;
 6 void ha2(int n,char a,char b,char c) {
 7     if(n==0)return;
 8     ha2(n-1,a,c,b);
 9     cout<<a<<"->"<<n<<"->"<<b<<endl;
10     ha2(n-1,c,b,a);
11 }
12 int main() {
13     int n;
14     char a,b,c;
15     cin>>n;
16     cin>>a>>b>>c;
17     ha2(n,a,b,c);
18     return 0;
19 }

 

SDK接入(1)之Android Facebook SDK接入

出于打都高达丝,且处于维护阶段,所以有空写写各种SDK接入过程与遇的题材,也作为一种植工作总。SDK接入主流分为这么几类,登录支付分享推送统计等于,达到借‘他山之石’的法力。顺便吐槽下,现在境内是只渠道即整治个所谓的好的SDK,各种文档更新不就、文档与Sample不对应、Sample测试不备或运行报错、技术支持沟通无人过来等,真是吃其害。

(1)接入前准备干活

  1. 亟需是上网(FQ,VPN什么的和谐解决),注册Facebook(后面统称FB)帐号。
  2. FB
    SDK下载地址也:https://origincache.facebook.com/developers/resources/?id=facebook-android-sdk-current.zip
  3. FB
    SDK接入文档地址也:https://developers.facebook.com/docs/android/getting-started/
  4. FB
    SDK完整源码地址为:https://github.com/facebook/facebook-android-sdk

(2)创建以,获取使用编号和密钥

步骤如下:

  1. 登录facebook.com,在侧边可以看有只开发者项,点击管理应用程序。如图:
    统计 1
  2. 创造以,并加加要发布之平台。填写Package NameDefault Activity Class Name
    统计 2

    注:Package Name为应用程序的包名,与Manifest里面的包名对应。
    Default Activity Class
    Name也第一只启动之Activity,要为此完的类名,与声明如下的Activity类名对应。

         <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="bigdevil"/>
        </intent-filter>  
    

例如:org.cocos2dx.lua.SplashActivity

  1. 生成KeyHash,并配置KeyHash。
    • 下载OpenSSL,并上加到环境变量。
    • 指令执行执行:keytool -exportcert -alias androiddebugkey -keystore
      %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary |
      openssl
      base64,注意-keystore后面是签名文件的路子,执行完毕以后会生成如图:
      统计 3
  2. 用变的KeyHash(28独字符的字符串)配置到FB后台,可加加多单。
  3. 别配置,如图:
    统计 4
    统计 5
    统计 6

(3)下载FB SDK,并部署参数

FB SDK下载后底文件,形如:facebook-android-sdk-4.8.2.aar。
假如以AndroidStudio作为IDE,则导入该.aar文件。步骤为:

  1. 直白将facebook-android-sdk-4.8.2.aar复制到工程的libs路径下。如图:
    统计 7
  2. 修改build.gradle,添加如下配置:

       repositories {
           flatDir {
               dirs 'libs'
           }
       }  
    
       compile(name: 'facebook-android-sdk-4.8.2', ext: 'aar')
    

    如图:
    统计 8
    接下来,重新Rebuild Project一下,成功则会生成如下:
    统计 9

比方采用Eclipse作为IDE,则需将.aar文件解压。解压完要下图:
统计 10

拷贝assetsresAndroidManifest.xmlclasses.jar,新建Eclipse工程并挂对诺文件。

(4)FB SDK接入

  1. 部署FB
    id(FB后高博的用编号)。打开res/values/strings.xml,添加:

    <string name="facebook_app_id">172633573185136</string>
    
  2. 配置AndroidManifest,添加权限

    <uses-permission android:name="android.permission.INTERNET"/>
    

    以application项下安排:

    <application android:label="@string/app_name">
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
    </application>  
    
  3. 初始化FB SDK和激活事件,在Application的onCreate()调用如下代码:

    public void onCreate() {
        super.onCreate();
        FacebookSdk.sdkInitialize(getApplicationContext());
        AppEventsLogger.activateApp(this);
    }
    
  4. 讲FacebookActivity配置到AndroidManifest中,如下:

    <activity
        android:name="com.facebook.FacebookActivity"
        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />  
    
  5. FB登录分为带Facebook按钮和不牵动Facebook按钮两种形式。带Facebook按钮需要拿FB提供的LoginButton累加到好的布局中。而玩耍登录,只需要点击相应的嬉戏登录按钮再调用FB登录即可。所以下面介绍下,不带来Facebook按钮的这种样式。

在MainActivity中的onCreate()着注册登录回调,代码如下:

    callbackManager = CallbackManager.Factory.create();

    LoginManager.getInstance().registerCallback(callbackManager,
           new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                     // App code
                }

                @Override
                public void onCancel() {
                     // App code
                }

                @Override
                public void onError(FacebookException exception) {
                     // App code   
                 }
    });
  1. FB登录,注意登录权限需采取public_profile,并在onActivityResult丁拍卖用户授权,代码如下:

    private static final String PERMISSION = "public_profile";  
    
    LoginManager loginManager = LoginManager.getInstance();
    loginManager.setDefaultAudience(loginManager.getDefaultAudience());
    loginManager.setLoginBehavior(loginManager.getLoginBehavior());
    loginManager.logInWithReadPermissions(AppActivity.context_self, Arrays.asList(PERMISSION));  
    

onActivityResult处理代码:

    public static void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (callbackManager != null) {
            callbackManager.onActivityResult(requestCode, resultCode, data);
        }
    }
  1. 登录结果处理,在FacebookCallback备受,代码如下:

    public void onSuccess(LoginResult loginResult) {
        AccessToken accessToken = loginResult.getAccessToken();
        String userId = accessToken.getUserId();
        String token = accessToken.getToken();
        // TODO:拿到userId和token,传给游戏服务器校验
    }
    
    public void onCancel() {
    }
    
    public void onError(FacebookException exception) {
        if (exception instanceof FacebookAuthorizationException) {
            LoginManager.getInstance().logOut();
            // TODO:
        }
    }
    
  2. 采用AppEventsLogger来添加打定义统计事件,登录和开支(分别对应游戏FB登录和倡导支付并付出成功时)的示范代码如下:

签到事件统计:

    Bundle parameters = new Bundle();
    parameters.putString(AppEventsConstants.EVENT_PARAM_CONTENT_ID, roleId);
    parameters.putInt(AppEventsConstants.EVENT_NAME_ACHIEVED_LEVEL, roleLevel);
    AppEventsLogger logger = AppEventsLogger.newLogger(this, FACEBOOK_AD_ID);
    logger.logEvent("Login", parameters);

开发事件统计:

    AppEventsLogger logger = AppEventsLogger.newLogger(this, FACEBOOK_AD_ID);
    logger.logPurchase(BigDecimal.valueOf(orderInfo.getInt("price")), Currency.getInstance(SdkImp.CURRENCY));  

FB SDK接入常见错误

  1. 登录权限异常,FacebookCallback的onError中归FacebookAuthorizationException:
    釜底抽薪:一般是FB帐号设置了安证明,例如登录要安全码之类的,需要修改FB安全设置。

  2. Invalid key hash错误。如图:
    统计 11
    解决:需要肯定正式打包的签名文件(.keystore)和生成keyHash时是否也跟一个签名文件。

作者:AlphaGL
出处:http://www.cnblogs.com/alphagl/
版权所有,欢迎保留原来文链接进行转载 🙂