#C++ Day45 Basic Data Structure Chapter3  review-2  January 2 2026

4.猜数字

LCP 01. 猜数字

已解答

简单

小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜。他们一共进行三次这个游戏,请返回 小A 猜对了几次?

输入的guess数组为 小A 每次的猜测,answer数组为 小B 每次的选择。guess和answer的长度都等于3。

示例 1:

输入:guess = [1,2,3], answer = [1,2,3]

输出:3

解释:小A 每次都猜对了。

示例 2:

输入:guess = [2,2,3], answer = [3,2,1]

输出:1

解释:小A 只猜对了第二次。

限制:

  1. guess的长度 = 3
  2. answer的长度 = 3
  3. guess的元素取值为 {1, 2, 3} 之一。
  4. answer的元素取值为 {1, 2, 3} 之一。

myanswer:

class Solution {

public:

    int game(vector<int>& guess, vector<int>& answer) {

        int count=0;

        for(int i=0;i<3;i++){

            if(guess[i] == answer[i]){

                count++;

            }

        }

        return count;

    }

};

5.拿硬币 

LCP 06. 拿硬币

已解答

简单

相关标签

桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。

示例 1:

输入:[4,2,1]

输出:4

解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。

示例 2:

输入:[2,3,10]

输出:8

限制:

  • 1 <= n <= 4
  • 1 <= coins[i] <= 10

class Solution {

public:

    int minCount(vector<int>& coins) {

        int ret = 0;

        for(int i=0;i<coins.size();i++){

           ret += (coins[i] + 1) /2; 

           //如果偶数这个+1 无效 奇数把最后一次当1

        }

    return ret;

    }

};

2.数值统计

数值统计 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 224358    Accepted Submission(s): 104159

Problem Description 统计给定的n个数中,负数、零和正数的个数。  
Input 输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数;如果n=0,则表示输入结束,该行不做处理。  
Output 对于每组输入数据,输出一行a,b和c,分别表示给定的数据中负数、零和正数的个数。  
Sample Input 6 0 1 2 3 -1 0 5 1 2 3 4 0.5 0   
Sample Output 1 2 3 0 0 5  
Author lcy  
Source C语言程序设计练习(二)

//Sequential List – value statistics

#include <iostream>

using namespace std;

#define eleType double

//1.define a structure

struct SequentialList {

eleType* elements;

int capacity;

int size;

};

//2.initialize

void initializeList(SequentialList* list, int capacity) {

list->elements = new eleType[capacity];

list->capacity = capacity;

list->size = 0;

}

//3.destroy

void destroyList(SequentialList* list) {

delete[] list->elements;

list->elements = nullptr;

list->size = 0;

list->capacity = 0;

}

//4.size and is it empty

int sizeOfList(SequentialList* list) {

return list->size;

}

bool isEmpty(SequentialList* list) {

return list->size == 0;

}

//5.insert

void insertElement(SequentialList* list, int index, eleType element) {

if (index<0 || index>list->size) {

throw std::invalid_argument(“invalid index”);

}

if (list->capacity == list->size) {

int newcapacity = (list->capacity == 0) ? 4 : list->capacity * 2;

eleType* newlist = new eleType[newcapacity];

for (int i = 0; i < list->size; i++) {

newlist[i] = list->elements[i];

}

delete[] list->elements;

list->elements = newlist;

list->capacity = newcapacity;

}

for (int i = list->size; i > index; i–) {

list->elements[i] = list->elements[i – 1];

}

list->elements[index] = element;

list->size++;

}

//6.delete

void deleteElement(SequentialList* list, int index) {

if (index < 0 || index >= list->size) {

throw std::invalid_argument(“invalid index”);

}

for (int i = index; i < list->size – 1; i++) {

list->elements[i] = list->elements[i + 1];

}

list->size–;

}

//7.findindex

int findIndex(SequentialList* list, eleType element) {

for (int i = 0; i < list->size; i++) {

if (list->elements[i] == element) {

return i;

}

}

return -1;

}

//8.get

eleType getElement(SequentialList* list, int index) {

if (index < 0 || index >= list->size) {

throw std::invalid_argument(“invalid index”);

}

return list->elements[index];

}

//9.update

void updateElement(SequentialList* list, int index, eleType element) {

if (index < 0 || index >= list->size) {

throw std::invalid_argument(“invalid index”);

}

list->elements[index] = element;

}

int main() {

SequentialList mylist;

int n;

while (cin >> n && n!=0 ) {

initializeList(&mylist, n);

for (int i = 0; i < n; i++) {

double val;

cin >> val;

insertElement(&mylist, i, val);

}

double a=0, b=0, c=0;

for (int i = 0; i < n; i++) {

if (getElement(&mylist, i) > 0) {

c++;

}

else if(getElement(&mylist, i) < 0){

a++;

}

else {

b++;

}

}

cout << a <<‘ ‘ << b << ‘ ‘ << c <<endl ;

destroyList(&mylist);

}

return 0;

}

//Sequential List – value statistics

#include <iostream>

using namespace std;

#define eleType double

//1.define a structure

struct SequentialList {

eleType* elements;

int capacity;

int size;

};

//2.initialize

void initializeList(SequentialList* list, int capacity) {

list->elements = new eleType[capacity];

list->capacity = capacity;

list->size = 0;

}

//3.destroy

void destroyList(SequentialList* list) {

delete[] list->elements;

list->elements = nullptr;

list->size = 0;

list->capacity = 0;

}

//4.size and is it empty

int sizeOfList(SequentialList* list) {

return list->size;

}

bool isEmpty(SequentialList* list) {

return list->size == 0;

}

//5.insert

void insertElement(SequentialList* list, int index, eleType element) {

if (index<0 || index>list->size) {

throw std::invalid_argument(“invalid index”);

}

if (list->capacity == list->size) {

int newcapacity = (list->capacity == 0) ? 4 : list->capacity * 2;

eleType* newlist = new eleType[newcapacity];

for (int i = 0; i < list->size; i++) {

newlist[i] = list->elements[i];

}

delete[] list->elements;

list->elements = newlist;

list->capacity = newcapacity;

}

for (int i = list->size; i > index; i–) {

list->elements[i] = list->elements[i – 1];

}

list->elements[index] = element;

list->size++;

}

//6.delete

void deleteElement(SequentialList* list, int index) {

if (index < 0 || index >= list->size) {

throw std::invalid_argument(“invalid index”);

}

for (int i = index; i < list->size – 1; i++) {

list->elements[i] = list->elements[i + 1];

}

list->size–;

}

//7.findindex

int findIndex(SequentialList* list, eleType element) {

for (int i = 0; i < list->size; i++) {

if (list->elements[i] == element) {

return i;

}

}

return -1;

}

//8.get

eleType getElement(SequentialList* list, int index) {

if (index < 0 || index >= list->size) {

throw std::invalid_argument(“invalid index”);

}

return list->elements[index];

}

//9.update

void updateElement(SequentialList* list, int index, eleType element) {

if (index < 0 || index >= list->size) {

throw std::invalid_argument(“invalid index”);

}

list->elements[index] = element;

}

int main() {

SequentialList mylist;

int n;

while (cin >> n && n!=0 ) {

initializeList(&mylist, n);

double neg = 0, zero = 0, pos = 0;

for (int i = 0; i < n; i++) {

double val;

cin >> val;

if (val > 0) {

pos++;

}

else if (val < 0) {

neg++;

}

else {

zero++;

}

}

cout << neg <<‘ ‘ << zero << ‘ ‘ << pos <<endl ;

destroyList(&mylist);

}

/*return 0;

Run ID Submit Time Judge Status Pro.ID Exe.Time Exe.Memory Code Len.Language Author

40643282 2026 – 01 – 02 07:37 : 49 Accepted 2008 15MS 1812K 2546 B C++ supervito

40643281 2026 – 01 – 02 07 : 37 : 19 Accepted 2008 15MS 1812K 2549 B C++ supervito

40643280 2026 – 01 – 02 07 : 17 : 40 Accepted 2008 0MS 1812K 2626 B C++ supervito*/

}

4.青年歌手大奖赛_评委会打分

青年歌手大奖赛_评委会打分 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 184150    Accepted Submission(s): 90169

Problem Description 青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。  
Input 输入数据有多组,每组占一行,每行的第一个数是n(2<n<=100),表示评委的人数,然后是n个评委的打分。  
Output 对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。  
Sample Input 3 99 98 97 4 100 99 98 97  
Sample Output 98.00 98.50  
Author lcy  
Source C语言程序设计练习(三)

#include <iostream>

using namespace std;

#define eleType double

//1.define a structure

struct SequentialList {

eleType* elements;

int capacity;

int size;

};

//2.initialize

void initializeList(SequentialList* list, int capacity) {

list->elements = new eleType[capacity];

list->capacity = capacity;

list->size = 0;

}

//3.destroy

void destroyList(SequentialList* list) {

delete[] list->elements;

list->elements = nullptr;

list->size = 0;

list->capacity = 0;

}

//4.size and is it empty

int sizeOfList(SequentialList* list) {

return list->size;

}

bool isEmpty(SequentialList* list) {

return list->size == 0;

}

//5.insert

void insertElement(SequentialList* list, int index, eleType element) {

if (index<0 || index>list->size) {

throw std::invalid_argument(“invalid index”);

}

if (list->capacity == list->size) {

int newcapacity = (list->capacity == 0) ? 4 : list->capacity * 2;

eleType* newlist = new eleType[newcapacity];

for (int i = 0; i < list->size; i++) {

newlist[i] = list->elements[i];

}

delete[] list->elements;

list->elements = newlist;

list->capacity = newcapacity;

}

for (int i = list->size; i > index; i–) {

list->elements[i] = list->elements[i – 1];

}

list->elements[index] = element;

list->size++;

}

//6.delete

void deleteElement(SequentialList* list, int index) {

if (index < 0 || index >= list->size) {

throw std::invalid_argument(“invalid index”);

}

for (int i = index; i < list->size – 1; i++) {

list->elements[i] = list->elements[i + 1];

}

list->size–;

}

//7.findindex

int findIndex(SequentialList* list, eleType element) {

for (int i = 0; i < list->size; i++) {

if (list->elements[i] == element) {

return i;

}

}

return -1;

}

//8.get

eleType getElement(SequentialList* list, int index) {

if (index < 0 || index >= list->size) {

throw std::invalid_argument(“invalid index”);

}

return list->elements[index];

}

//9.update

void updateElement(SequentialList* list, int index, eleType element) {

if (index < 0 || index >= list->size) {

throw std::invalid_argument(“invalid index”);

}

list->elements[index] = element;

}

int main() {

int n;

while (cin >> n && n>2 && n<=100) {

SequentialList mylist;

initializeList(&mylist, n);

for (int i = 0; i < n; i++) {

eleType ele;

cin >> ele;

insertElement(&mylist, i, ele);

}

//eleType Emax = -10000000000, Emin = 10000000000,Esum=0; //可能会有一个非常大的数字

eleType Emax = getElement(&mylist, 0);//假设第一个最大和最小

eleType Emin = getElement(&mylist, 0);

eleType Esum = 0;

for (int i = 0; i < n; i++) {

eleType ele = getElement(&mylist,i);

if (Emax < ele) Emax = ele;

if (Emin > ele) Emin = ele;

Esum += ele;

}

Esum -= Emax;

Esum -= Emin;

Esum /= (n – 2);

printf(“%.2lf\n”,Esum);

destroyList(&mylist);

}

}

6.值相等的最小索引

给你一个下标从 0 开始的整数数组 nums ,返回 nums 中满足i mod 10 == nums[i]的最小下标 i ;如果不存在这样的下标,返回-1。

x mod y 表示 x 除以 y 的 余数

示例 1:

输入:nums = [0,1,2]

输出:0

解释:

i=0: 0 mod 10 = 0 == nums[0].

i=1: 1 mod 10 = 1 == nums[1].

i=2: 2 mod 10 = 2 == nums[2].

所有下标都满足 i mod 10 == nums[i] ,所以返回最小下标 0

示例 2:

输入:nums = [4,3,2,1]

输出:2

解释:

i=0: 0 mod 10 = 0 != nums[0].

i=1: 1 mod 10 = 1 != nums[1].

i=2: 2 mod 10 = 2 == nums[2].

i=3: 3 mod 10 = 3 != nums[3].

2 唯一一个满足 i mod 10 == nums[i] 的下标

示例 3:

输入:nums = [1,2,3,4,5,6,7,8,9,0]

输出:-1

解释:不存在满足 i mod 10 == nums[i] 的下标

示例 4:

输入:nums = [2,1,3,5,2]

输出:1

解释:1 是唯一一个满足 i mod 10 == nums[i] 的下标

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 9

class Solution {

public:

    int smallestEqual(vector<int>& nums) {

        for(int i=0;i<nums.size();i++){

            if(i % 10 == nums[i]){

                return i;

            }

        }

        return -1;

    }

};

7.最大连续1的个数

485. 最大连续 1 的个数

已解答

简单

相关标签

相关企业

提示

给定一个二进制数组 nums , 计算其中最大连续 1 的个数。

示例 1:

输入:nums = [1,1,0,1,1,1]

输出:3

解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.

示例 2:

输入:nums = [1,0,1,1,0,1]

输出:2

提示:

  • 1 <= nums.length <= 105
  • nums[i] 不是 0 就是 1.

class Solution {

public:

    int findMaxConsecutiveOnes(vector<int>& nums) {

        int max=0,temp=0;

        for(int i=0;i<nums.size();i++){

            if(nums[i]==1){

                temp++;

            }

            else{

                if(temp > max){                 

                    max=temp; 

                }

                temp = 0;

            }

        }

         if(temp > max){                 

                    max=temp; 

                }

                temp = 0;

        return max;

    }

};

class Solution {

public:

    int findMaxConsecutiveOnes(vector<int>& nums) {

        int max_val=0,temp=0;

        for(int i=0;i<nums.size();i++){

            if(nums[i] == 1){

                temp++;

                if(temp>max_val){

                    max_val = temp;

                }

            }

            else{

                temp = 0;

            }

        }

        return max_val;

    }

};

//修改变量名版本

class Solution {

public:

    int findMaxConsecutiveOnes(vector<int>& nums) {

        int ret=0,pre=0;

        for(int i=0;i<nums.size();i++){

            if(nums[i] == 1){

                pre = pre + 1;

                if(pre>ret){

                    ret = pre;

                }

            }

            else{

                pre = 0;

            }

        }

        return ret;

    }

};