s牛客网
n进制转化为十进制有两种方法:
//正向:
int id = 0;
for(int i = 0; i < len; i++)
id = id * n + (str[i] -'0') ;
//反向:
int id = 0, product = 1;
for(int i = len -1; i >=0; i--)
{
id += product * str[i];
product *= n;
}
题解 | #数制转换#_牛客网用栈即可 #include #include #include using namespace std; int main(){ string s; stackans;_牛客网_牛客在手,offer不愁
https://www.nowcoder.com/discuss/443847451172196352?sourceSSR=search
晴问算法
1.入门模拟-字符串处理
句子逆序输出
⚠️字符串长度要多一位,因为末尾有/0, 设置为大约500条字符串即可通过,但1000条更保险。
单词数统计
公共前缀
总思想
简单模拟!!2的幂!!
⚠️重要!!非常基础!:
小思维积累点:
1。
2.输出三位数的百,十,个位:
657在计算机中可看成 int ,也可以看成三个char,char [4](多一位,因为字符串末尾有‘/0’)
2.算法初步-排名
1.两种排名要求
首先从大到小排序
排名如何表示:都用下标的函数表示:i+1(i从0开始)
排名如何算,不同之处:
1 2 2 2 5,设置rank = 1, 与前一名(i-1)比较分数是否相同,若相同rank不变并输出;若不同rank+1并输出。
1 4 4 4 5,设置sameRankCount = 1(用于输出),与后一名(i+1)比较分数若相同则sameRankCount++,直到找到后一名是不同的分数,然后一次性连续输出sameRankCount行结果,再重置为1.
int sameRankCount = 1;
for(int i = 0; i < n; i++)
{
if(i < n-1 && score[i]== score[i+1])
sameRankCount ++;
else
{
for(int j = 1; j <= sameRankCount; j++)
printf("%d %d\n", score[i], i+1);
sameRankCount = 1;
}
}
3.算法初步-散列
散列的主要思想:
哈希表的下标(索引)是每个元素映射后的值,因此它的长度由元素大小决定,一般来说(根据映射规则),元素越大对应的索引也越大,因此,由哈希表从小到大输出的索引(其对应元素)是严格递增的, 这可以运用在两个集合求并集并升序输出。
哈希表存放的内容一般是bool型(true,false),也可以是数字,看题目要求是否与个数有关(如晴问算法集合求差2)
小思维积累点:
1.不用if else, 减少代码量:晴问算法,⚠️,bool hash[ ]
也可以直接 printf("%d", hash[x] ) 因为计算机中只有ture是1,其余都是0.
while(m--)
{
int x;
scanf("%d", &x);
printf("%d", hash[x] ? 1: 0);
printf(m != 0 ? " " : "\n");
}
2.晴问算法,以后遇到a,b和b,a算作同一对的类似要求,就可以考虑给它排序!3.要求输出的末尾不许有多余的空格如:1 2 3,有两种方法,
一是把最后一个元素特殊处理;即都先输出元素; 其余再输出空格,最后一个不再输出空格;如
二是把第一个元素特殊处理,即第一个元素不先输出空格, 其余都先输出空格;然后再输出元素。
该方法一般用于:不知道输出数组有多少个应输出元素的情况,如根据哈希表输出ture的索引。
3.潜在朋友:每次清零0️⃣!+自己不算朋友!
#include <iostream>
#include <string.h>//memset()
using namespace std;
const int MAX_M = 205;
int hashTable[MAX_M] = {0};
const int MAX_N = 205;
int people[MAX_N] = {0};
int main(){
int n, m;
while( scanf("%d%d", &n, &m) != EOF)
{
memset(hashTable, 0, 205);//每次都要清零!
memset(people, 0, 205);
for(int i = 0; i < n; i++)
{
scanf("%d", &people[i]);
//记录下读者i喜欢的书编号,因为后续读者要按i从0-n-1输出
hashTable[people[i]]++;//自己喜欢也会++一次!
}
for(int i = 0; i < n; i++)
{
if(hashTable[people[i]] > 1)
printf("%d\n", hashTable[people[i]]-1);//自己不算朋友
else
printf("BeiJu\n");
}
}
return 0;
}