[c語言]codeday15找出陣列中出現一次的兩個值以及喝汽水模擬實現strcpy和
阿新 • • 發佈:2019-02-20
1.一個數組中只有兩個數字是出現一次,
其他所有數字都出現了兩次。
找出這兩個數字,程式設計實現
#include<stdio.h>
void find(int arr[],int len,int *m,int *n)
{
int s = 0;
int i = 0;
int j = 0;
int k = 0;
for(i=0; i<len; i++)
{
s ^=arr[i];
}
for(k=1;;k = k << 1)
{
if(((k & s) != 0))
{
break;
}
}
for(j=0; j<len; j++)
{
if((arr[j] & k) != 0)
{
*m ^= arr[j];
}
}
*n = s^*m;
}
int main()
{
int arr[10] = {1,1,2,3,3,4,4,5,7,7};
int len = sizeof(arr)/sizeof(arr[0]);
int m = 0;
int n = 0;
find(arr,len,&m,&n);
printf("%d,%d",m,n);
return 0;
}
2.喝汽水,1瓶汽水1元,2個空瓶可以換一瓶汽水,
給20元,可以多少汽水。
程式設計實現。
#include <stdio.h>
int drink_sodawater(int total)
{
int bottle = total;//初始總瓶數
int remainder = 0;//餘數
while(bottle > 1)
{
total += bottle / 2;
remainder = bottle % 2;
bottle = bottle/2 + remainder;
}
return total;
}
int main()
{
int money;
printf("請輸入錢數:>");
scanf("%d",&money);
printf ("能喝%d瓶\n",drink_sodawater(money));
return 0;
}
3.模擬實現strcpy
#include<stdio.h>
#include<assert.h>
char *my_strcpy(char *dest,const char *str)
{
char *p = dest;
assert(dest);
assert(str);
while(*dest++ = *str++)
{
;
}
return p;
}
int main()
{
char *arr1 = "abcdefg";
char arr2[10] = {0};
my_strcpy(arr2,arr1);
printf("%s\n",arr2);
return 0;
}
4.模擬實現strcat
#include<stdio.h>
#include<assert.h>
char *my_strcat(char *dest,const char *str)
{
char *p = dest;
assert(dest);
assert(str);
//跳到最後一個字元
while(*dest != '\0')
{
dest++;
}
//拷貝
while(*dest++ = *str++)
{
;
}
return p;
}
int main()
{
char arr1[30] = "i am a";
char arr2[30] = " student";
my_strcat(arr1,arr2);
puts(arr1);
return 0;
}