喝汽水,查找数

1、.一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
找出这两个数字,编程实现。
思路分析:
让数组中的每个数字都与其他的数字进行比较(包括它自身),如果遇到相等的数字,则k++完成后,k为2,因为在定义的两层循环中,i,j各自独立,在比较的过程中,a[i]还会与自身比较(a[0]与a[0]比较,第一个a[0]是a[i]的,第二个a[0]是a[j]的),所以当k == 1时,说明数组中该数字只出现了一次。代码如下:

 #include<stdio.h>
int Find(int arr[], int sz)
{
    int i = 0;
    int j = 0;
    for(i=0; i<sz; i++)
    {
        int k = 0;
        for(j=0; j<sz; j++)
        {
            if(arr[i] == arr[j]) 
            {
                k++; 
            }               
        }   
        if(k == 1)
        {
            printf("%d ",arr[i]);
        }
    }
    printf("\n");
}
int main()
{
    int arr[] = {1,2,3,5,1,2,3,6};
    int sz = sizeof(arr)/sizeof(arr[0]);
    Find(arr,sz);
    return 0;
 }

运行结果:
这里写图片描述
2、喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。
思路分析如下:首先得出未用空瓶子换时可以喝20瓶汽水,此时20个空瓶子可以换10瓶,依次类推,使用循环语句即可得出答案。
此题的难点在于用空瓶子换汽水时的代码实现,empty/2为第一次换完汽水后喝到的汽水数目,累加在之前喝到的汽水数目上,新得到的空瓶子数为empty/2 + empty%2。而只要empty>1,即有两个空瓶子时,就可以进行兑换,所以这是一个循环。
代码如下:

 #include<stdio.h>
int main()
{
    int num = 0;     //喝到汽水的数目  
    int empty = 0;   //空瓶子数目 
    int money = 20;
    int price = 1;
    empty = num = money/price;         //一开始喝到的汽水数目 
    while(empty>1)
    {
        num += empty/2;
        empty = empty/2 + empty%2;
    }
    printf("总共喝到的汽水数:%d ",num);
    return 0;
}

结果为:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/Hb_key/article/details/81270131