斐波那契数列intf〔31〕;定义一个全局辅助数组intfib(intn){f〔0〕0;f〔1〕1;初始化。分别存储在第0,1位置for(inti2;in;i){f〔i〕f〔i1〕f〔i2〕;一层循环模拟递推公式}returnf〔n〕;}n的第k个因子intkthFactor(intn,intk){inti,cnt0;(1)cnt为因子计数器for(i1;in;i){(2)枚举if(ni0){(3)找到cnt;(4)1if(cntk)returni;(5)找到}}return1;(6)没找到}统计平方和三元组intmax(inta,intb){returnab?a:b;(1)一个函数返回最大的那个}intcountTriples(intn){inta,b,c,sum,ans0;for(a1;an;a){for(b1;bn;b){sumaabb;(2)二层循环枚举a,b。得到他们的和for(cmax(a,b)1;cn;c){(3)枚举c。但是一定要比a,b里面的最大的还要大。降低复杂度if(sumcc){ans;(4)找到就跳出break;}if(sumcc){break;(5)不符合条件}}}}returnans;}找出数组的最大公约数intgcd(inta,intb){inti;for(ia;i1;i){if(ai0bi0){returni;(1)枚举}}return1;}intfindGCD(intnums,intnumsSize){inti;intminnums〔0〕,maxnums〔0〕;for(i1;inumsSize;i){if(nums〔i〕min)minnums〔i〕;(2)选择最大小的数if(nums〔i〕max)maxnums〔i〕;(3)}returngcd(min,max);(4)}最大三角形的面积doublearea(inta,intb,intc){returnfabs((b〔0〕a〔0〕)(c〔1〕a〔1〕)(b〔1〕a〔1〕)(c〔0〕a〔0〕))2;}doublelargestTriangleArea(intpoints,intpointsSize,intpointsColSize){inti,j,k;doublea,maxa0;for(i0;ipointsSize;i){for(j0;jpointsSize;j){for(k0;kpointsSize;k){aarea(points〔i〕,points〔j〕,points〔k〕);(1)枚举if(amaxa){maxaa;(2)找到最大的保存}}}}returnmaxa;(3)返回最大面积}数组异或操作分两步模拟,先把所有数都通过规则生成出来。然后再将所有数异或,因为异或满足左结合律,所以可以一边生成,一边异或,最后返回所有数异或的和。intxorOperation(intn,intstart){inti,ans0;for(i0;in;i){ansstarti2;(1)一边生成一边异或}returnans;}整数的各位积和之差首先,可以利用迭代将每位数字取出来,然后用两个变量在迭代的过程中,分别保存它们的积与和,然后再相减即可。intsubtractProductAndSum(intn){intprod1,sum0,digit;while(n){digitn10;(1)取当前数字的最低位proddigit;(2乘积存储在prodsumdigit;(3)和存在sumn10;(4)将数字除10}returnprodsum;}统计位数为偶数的数字对每个数字不断除10,然后统计多少位,如果位数为偶数则计数器加一,最后返回计数器intfindNumbers(intnums,intnumsSize){inti,bit,cnt0;for(i0;inumsSize;i){bit0;while(nums〔i〕){nums〔i〕10;bit;(1)对于每个数。不断除10。统计当前数的位数}if(bit20)cnt;(2)位数为偶数,则计数器自增}returncnt;}搜索旋转排序数组整数数组nums按升序排列,数组中的值互不相同。给你旋转后的数组nums和一个整数target如果nums中存在这个目标值target,则返回它的下标,否则返回1。这个问题问了一大堆,最后其实就是在一个数组中找一个数,找不到就返回1。OK,直接搞,不要有顾虑,O(n)O(n)O(n)还能怎么卡你?怎么卡都卡不住,一次遍历完事。intsearch(intnums,intnumsSize,inttarget){inti;for(i0;inumsSize;i){if(nums〔i〕target){returni;(1)遍历数组。找到满足条件的数。返回对应下标}}return1;(2)遍历完没找到。返回1}差的绝对值为K的数对数目给你一个整数数组numsnumsnums和一个整数kkk,长度小于等于200,请你返回数对(i,j)(i,j)(i,j)的数目,满足ijijij且nums〔i〕nums〔j〕knums〔i〕nums〔j〕knums〔i〕nums〔j〕k。直接枚举两个下标,值相减等于kkk时计数器加一。枚举完毕,返回计数器。intcountKDifference(intnums,intnumsSize,intk){inti,j,ans0;for(i0;inumsSize;i){for(ji1;jnumsSize;j){if(abs(nums〔i〕nums〔j〕)k)(1)枚举任意两个数。如果两个数相差的绝对值等于K。计数器ans;}}returnans;}宝石与石头给定字符串J代表石头中宝石的类型,和字符串S代表你拥有的石头。S中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。JJ中的字母不重复,J和S中的所有字符都是字母。字母区分大小写,因此a和A是不同类型的石头。考虑到J中所有的字母要么是大写,要么是小写,即一定是ASCII字符所以转换成整型后只有〔0,255〕〔0,255〕〔0,255〕的值,可以开辟一个大小为256的哈希数组,然后遍历一遍字符串J对于出现的字符标记位1。然后再遍历字符串S,如果在哈希数组中找到对应的字符,则计数器加一。最后,返回计数器就是答案了。inthas〔256〕;intnumJewelsInStones(charjewels,charstones){inti;intans0;memset(has,0,sizeof(has));for(i0;jewels〔i〕;i){has〔jewels〔i〕〕1;(1)遍历一遍字符串J,对于出现的字符标记位1}for(i0;stones〔i〕;i){if(has〔stones〔i〕〕){ans;(2)遍历字符串S。如果在哈希数组中找到对应的字符。计数器}}returnans;(3)}