第一篇博客——冬夜小记。

HDU的几道水题。
自己感觉有一些小的注意点。
码一下。

HDU 1098在这里插入图片描述

其实我觉得,这是一道数学题…

解题思路:数学归纳法

f(x)=5x13+13x5+kax
假设当x=n时,65|f(x)成立,那一定有 65|f(n+1)成立,那么65|(f(n+1)-f(n)) 成立。
通过二项展开可以得到只要18+k*a可以被65整除就可以了。
(PS:13、5都是质数,用二项式定理的时候结果一定是13或5的倍数!)
所以在0~64之间遍历就ok。
(65肯定不对,如果超过65的话,e.g.66相当于65+1,65k可以不看)

放个代码。

#include<iostream>
using namespace std;

int main(){
    int k,a;
    while(cin>>k){
        for(a=0;a<=65;a++){
            if((18+k*a)%65==0) break;
        }
        if(a==66) cout<<"no"<<endl;
        else cout<<a<<endl;
    }
    return 0;
}
HDU 1001

(看着极其简单,就是一直出wrong answer!!!)
在这里插入图片描述
一拿到这道题,正常思维:高斯求和嘛!然后开始用公式了:n*(n+1)/2,觉得多简单,然后submit之后就是wrong answer,我刚开始以为是blank line的问题,后来发现怎么调都不对,查了下别人的博客,发现有一句话很重要但没注意:You may assume the result will be in the range of 32-bit signed integer. 所以是n*(n+1)超了范围……

根据一篇博客上面写的如下可以解决:

#include<iostream>
using namespace std;

int main(){
    int n;
    while(cin>>n){
        if(n%2==0) cout<<n/2*(n+1)<<endl<<endl;
        else cout<<(n+1)/2*n<<endl<<endl;
    }
    return 0;
}

先判断一下n的奇偶性,把n或n+1先/2,这样就不会超范围辣~

PS:有时候你发现,最笨的方法,好像,毫无难度……
在这里插入图片描述哭了。

另附:
刚开始以为自己blank line错了,就问XL怎么样使输出的最后一个数字后面没有空行。XL提供的方法不错,记小本本上:
思路:先把第一个数输出,以后再输出的时候先输出一个空行,再输出数,perfect。
方法:设一个flag=0,输入第一个数后,flag++,然后判断,flag为1时,只输出数,flag不为1时,既输出空行又输出数。

HDU 1004

在这里插入图片描述

然后是我写的代码,我觉得海星……
想说一个注意点,就是用while(cin>>n)的时候,如果在里面放了什么计数的之类,一定要记得初始化!!!!!!

#include<iostream>
#include<string>
using namespace std;

int main(){
    int N;
    string color[1000];
    while(cin>>N){
        int flag[1000]={};
        int max=1,k=0;
        if(N==0) return 0;
        else{
            cin>>color[0];
            flag[0]++;
            for(int i=1;i<N;i++){
                cin>>color[i];
                flag[i]++;
                for(int j=0;j<i;j++){
                    if(color[i]==color[j]) flag[i]=flag[j]+1;
                }
                if(flag[i]>max){
                    max=flag[i];
                    k=i;
                }
            }
            cout<<color[k]<<endl;    
        }
    }
    return 0;
}

这里面涉及到两个问题,书上有但我不会的,搜索出来的:
1.如何输出数组中最大的数的(值及其)下标?
在这里插入图片描述
也是假定一个max或者min,比较然后赋值就ok了。

2.将数组初始化为0:

  • 全局数组
       int arr[10]; //声明时不赋值,默认值为0
  • 局部数组
       int arr[10] = {};
  • 指针
       int* arr = new int [10];
       for (int i = 0; i < 10; i ++) arr[i] = 0; //动态获取的内存,默认值undefined

第一次写还有点小激动呢!
希望以后的OJ题也是好好做,好好记笔记啦。
晚安。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
接入第三方登录是让用户方便快捷地使用已有账号登录你的网站或应用程序,提高用户体验的一种方式。本文将介绍如何使用 PHP 实现微信公众号第三方登录。 1. 获取微信授权 首先,需要获取微信用户的授权。具体步骤如下: 1)引导用户打开微信授权页面: ```php $appid = 'your_appid'; $redirect_uri = urlencode('http://yourdomain.com/callback.php'); $scope = 'snsapi_userinfo'; $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=$scope&state=STATE#wechat_redirect"; header("Location: $url"); ``` 其中,`$appid` 是你的微信公众号的 AppID,`$redirect_uri` 是授权后回调的 URL,`$scope` 是授权作用域,可以是 `snsapi_base` 或 `snsapi_userinfo`,`$state` 是自定义参数,用于防止 CSRF 攻击。 2)获取授权码: 用户同意授权后,会重定向到 `$redirect_uri` 指定的 URL,带上授权码 `code` 和 `state` 参数。 ```php $code = $_GET['code']; $state = $_GET['state']; ``` 3)获取 access_token 和 openid: 使用授权码 `code` 获取 `access_token` 和 `openid`。 ```php $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code"; $response = file_get_contents($access_token_url); $result = json_decode($response, true); $access_token = $result['access_token']; $openid = $result['openid']; ``` 其中,`$secret` 是你的微信公众号的 AppSecret。 2. 获取用户信息 获取到 `access_token` 和 `openid` 后,可以使用以下代码获取用户信息: ```php $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN"; $response = file_get_contents($userinfo_url); $userinfo = json_decode($response, true); ``` 其中,`$userinfo` 包含用户的昵称、头像等信息。 3. 将用户信息保存到数据库 最后,将获取到的用户信息保存到数据库中,以便下次使用时快速登录。 ```php // 连接数据库 $con = mysqli_connect('localhost', 'username', 'password', 'database'); mysqli_set_charset($con, "utf8"); // 查询用户是否已存在 $sql = "SELECT * FROM users WHERE openid='$openid'"; $result = mysqli_query($con, $sql); if (mysqli_num_rows($result) == 0) { // 用户不存在,插入新用户信息 $nickname = mysqli_real_escape_string($con, $userinfo['nickname']); $headimgurl = mysqli_real_escape_string($con, $userinfo['headimgurl']); $sql = "INSERT INTO users (openid, nickname, headimgurl) VALUES ('$openid', '$nickname', '$headimgurl')"; mysqli_query($con, $sql); } // 保存用户登录状态 $_SESSION['openid'] = $openid; ``` 以上就是使用 PHP 实现微信公众号第三方登录的步骤。需要注意的是,为了确保安全性,应该对用户输入的数据进行过滤和验证,防止 SQL 注入和 XSS 攻击等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值