喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。编程实现。

1.一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字,编程实现。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int arr[] = {4, 8, 8, 4, 5, 9, 3, 5};
    int count = 0;
    int sz = sizeof(arr)/sizeof(arr[0]) - 1;
    int i = 0, j = 0;
    for (i=0; i<sz; i++)
    {
        count = 0;
        for (j=0; j<sz+1; j++)
        {
            if (arr[i] == arr[j])
            {
                count ++;
            }

        }
        if (count == 1)
        {
            printf("%d ", arr[i]);
        }
    }
    system ("pause");
    return 0;
}
/*
运行结果:
9 3 请按任意键继续. . .
*/

2.喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。编程实现。

//喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。编程实现。
#include <stdio.h>
#include <stdlib.h>

int num (int n)
{
    if (n != 0)//零元返回零瓶
    {
        if (n != 1)//一元返回一瓶
        {
            if (n%2 == 0)//偶数
            {
                return n + num(n/2);//偶数直接返回第n行的个数加第n-1行的个数

;
            }
            else//奇数
            {
                return (n - 1) + num((n/2) + 1);//奇数时吧第n行余下的一个挪到第n-1行,按n-1行的进行计算
            }
        }
        else
        {
            return 1;
        }
    }
    else
    {
        return 0;
    }
}

int main()
{
    int n = 0;
    printf ("请输入钱数:\n");
    scanf ("%d", &n);
    printf ("%d元可以喝%d瓶汽水!!\n", n, 2*n-1);//方法一:找规律,规律刚好是n元钱能喝2*n-1瓶水;
    printf ("%d元可以喝%d瓶汽水!!\n", n, num(n));//方法二:用递归的方法计算;
    system ("pause");
    return 0;
}
/*
运行结果:
请输入钱数:
20
20元可以喝39瓶汽水!!
20元可以喝39瓶汽水!!
请按任意键继续. . .
*/

3.模拟实现strcpy

//strcpy(s1, s2)函数的意思是:把字符串s2拷贝到s1中,连同字符串结束标志也一同拷贝。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

char* my_strcpy(char* dest, const char* str)
{
    const char* ret = str;
    assert (str);
    while (*dest++ = *str++)
    {
        ;
    }
    *dest = *str;//最后把‘\0’赋给*dest
}

int main ()
{
    char arr1[] = "abcde";
    char arr2[10] = {'0'};

    my_strcpy (arr2, arr1);
    printf ("%s\n", arr2);

    system ("pause");
    return 0;
}
/*
运行结果:
abcde
请按任意键继续. . .
*/

4.模拟实现strcat

//char *strcat(char *dest, const char *str);
//strcat() 会将参数 str 字符串复制到参数 dest 所指的字符串尾部;
//dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL。

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

char* my_strcat (char* dest, const char* str)
{
    const char* ret = str;
    assert (str);
    while (*dest)//dest 指向'\0'
    {
        dest++;
    }
    while (*dest++ = *str++)//给dest从\0开始赋值,到str的\0时循环结束
    {
        ;
    }
    *dest = *str;//*dest = '\0';
    return (char *)ret;
}
int main()
{
    char arr1[] = "fdaifnd";
    char arr2[10] = "bc";
    my_strcat (arr2, arr1);
    printf ("%s\n", arr2);
    system ("pause");
    return 0;
}
/*
运行结果:
bcfdaifnd
请按任意键继续. . .
*/

猜你喜欢

转载自blog.csdn.net/a__b__c__/article/details/80252786