1.求第n个斐波那契数(非递归实现)。 2.一个数组中只有两个数字是出现一次,其他所有数字都出现 了两次。 找出这两个数字,编程实现。

xiaoxiao2021-02-28  155

1.求第n个斐波那契数(非递归实现)。 2.一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。   找出这两个数字,编程实现。 //100010010 代码1: 斐波那契数列 指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........ 这个数列从第3项开始,每一项都等于前两项之和 #include  <stdio.h> #include  <assert.h> #include  <windows.h> #pragma  warning( disable :4996) long  rfib( int  n ) { if  (  n  <= 2 ) { return  1; } return  fib( n -1) + fib( n -2); } long  fib( int  n ) { long  pren = 1; long  prenn = 1; int  i = 3; long  data = 1; for  (; i <=  n ; i++){ data = pren + prenn; prenn = pren; pren = data; } return  data; } int  main() { printf( "Please Enter: " ); int  n = 0; scanf( "%d" , &n); //long data = rfib(n); printf( "%u\n" , fib(n)); system( "pause" ); return  0; } 代码2: 按照之前的一个独立数据,现在2个,可以对其进行分类处理 #include  <stdio.h> #include  <assert.h> #include  <windows.h> void  find_data( int  * arr ,  int  len ,  int  * data1 ,  int  * data2 ) { assert ( arr  &&  len  > 0); assert ( data1 ); assert ( data2 ); int  tmp =  arr [0]; int  i = 1; for  (; i <  len ; i++){ tmp ^=  arr [i]; } //tmp is data1 and data2 ^ result! int  count = 0; int  flag = 0x1; while  (tmp){ flag <<= count; if  ( tmp & flag ){ break ; } } * data1  = * data2  = 0; for  (i = 0; i <  len ; i++ ){ if  (  arr [i] & flag ){ //data1 * data1  ^=  arr [i]; } else { //data2 * data2  ^=  arr [i]; } } } int  main() { int  arr[] = {1,1, 3,3,4,4,5,5,6,6, 9,19, 19,8, 7, 7}; int  len =  sizeof (arr) /  sizeof (arr[0]); int  data1, data2; find_data(arr, len, &data1, &data2); printf( "diff data : %d, %d\n" , data1, data2); system( "pause" ); return  0; }
转载请注明原文地址: https://www.6miu.com/read-34421.html

最新回复(0)