数组

发布时间 2023-03-22 21:13:07作者: BKYNEKO

/*
//列表元素的插入
//在一个数组的第x个位置插入一个新的数y
//输入四行
//第一行有一个整数n(5 <= n <= 10 )
//第二行有n个整数
//第三行有一个整数x,为要插入的位置
//第四行有一个整数y,为要插入的整数
//输出更新后的数组
样例输入
5
7 2 3 4 5
2
9
样例输出
7 9 2 3 4 5
#include<iostream>
using namespace std;
int main()
{
const int n = 5;
int a[n],b[n+1];
int i, x, y;
int m; cin >> m; //摆设
for (i = 0; i < n; i++)cin >> a[i];
cin >> x >> y;
if (x >= 1 && x <= n+1)
{
for (i = 0; i < x; i++)b[i] = a[i]; //插入之前的不变
b[x - 1] = y; //插入的
for (i=x-1; i < n+1; i++)b[i + 1] = a[i]; //插入之后的
for (i = 0; i < n+1; i++)cout << b[i]<<" ";
}
return 0;
}
*/

 

/*
//理解错了 改数组其中一个元素
#include<iostream>
using namespace std;
int main()
{
int n, i, x, y;
cin >> n;
if (n >= 5 && n <= 10)
{
int a[5];
for (i = 0; i < n; i++)cin >> a[i];
cin >> x >> y;
if (x >= 0 && x <= 9)
{
a[x] = y;
}
for (i = 0; i < n; i++)cout << a[i] << " ";
}
return 0;
}
*/

 

 

 


/*
//统计次数
//输入n个0~100的数,统计每个数出现的次数。
//第一行输入一个整数n
//第二行输入n个0~100的整数。
//从小到大输出次数超过0的数以及次数。
样例输入
10
1 1 0 2 3 4 6 0 1 2
样例输出
0 2
1 3
2 2
3 1
4 1
6 1
#include<iostream>
using namespace std;
int main()
{
const int n = 10;
int a[n],i;
int m; cin >> m;//摆设
for (i = 0; i < n; i++)cin >> a[i];
int b[100] = { 0 };//新建一个数组,数组的容量其实取决于arr数组里最大元素的值
for (i = 0; i<n; i++)b[a[i]]++;//如果出现了这个元素,这个元素在另一个数组对应位置上面的映射就加1
for (i = 0; i<n; i++)if (b[i]>0)cout << i << " " << b[i] << endl; //不重复输出元素
return 0;
}
*/

 

 

 


/*
//约瑟夫问题
//N个人围成一圈,从第一个开始报数,第M个将被杀掉,再由下一个人开始重新报数,直到最后剩下一个人。例如N = 6,M = 5,被杀掉的人的序号为5,4,6,2,3。最后剩下1号。
//输入两个正整数N和M。
//输出剩下的最后一个人的编号。
样例输入
6 5
样例输出
1
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
int n; //总人数n
cin>>n;
int *ar = (int*)calloc(n, sizeof(int));
int i;
for (i = 0; i<n; ++i)ar[i] = i + 1;//给n个人赋初值
int k;
cin>>k; //跳出数字k
int t = 0, num = n;
for (i = 1;; ++i)if (i > n)i = 1;//回溯
if (ar[i - 1] != 0)++t;//已被清空的位置,跳过
if (t == k)
{
ar[i - 1] = 0;
--num;
t = 0;
}
if (num == 1)break;//只剩一人时跳出循环
}
for (i = 0; i<n; ++i) //打印目标值
{
if (ar[i] != 0)
{
printf("%d\n", ar[i]);
break;
}
}
return 0;
}
*/

 

 

 

 

/*
//直方图
//给定一个非负整数数组,统计里面每一个数的出现次数。我们只统计到数组里最大的数。
//假设 Fmax(Fmax<10000)是数组里最大的数,那么我们只统计{ 0, 1, 2.....Fmax }里每个数出现的次数。
//第一行输入数组的大小n(1 ≤ n ≤ 10000)
//第二行输入数组的n个元素。
//按顺序输出每个数的出现次数,一行一个数。如果没有出现过,则输出0。
//对于例子中的数组,最大的数是3,因此我们只统计{ 0, 1, 2, 3 }的出现频数。
样例输入
5
1 1 2 3 1
样例输出
0
3
1
1
#include<iostream>
using namespace std;
int main()
{
int n;
int num[10000];
int fmax = 0;
int s[10000];
cin >> n;
for (int i = 0; i<n; i++)
{
cin >> num[i];
if (num[i]>fmax)fmax = num[i];
}
for (int i = 0; i <= fmax; i++)for (int j = 0; j<n; j++)if (num[j] == i)s[i]++;
for (int i = 0; i <= fmax; i++)cout << s[i] << endl;
return 0;
}
*/

 

 

 

/*
//数组元素移动
//读入N个整数存放在数组中,将每个元素依次后移一个位置,最后一个元素移动到第一个元素的位置。按照这种移动方法,总共移动x次,输出移动后的结果。
//第一行输入一个整数n(n不超过100)
//第三行输入一个整数x(0<x<n)
//输出移动x次以后的结果
样例输入
10
1 2 3 4 5 6 7 8 9 10
2
样例输出
9 10 1 2 3 4 5 6 7 8
#include<iostream>
using namespace std;
int main()
{
const int n = 10;
int a[n], b[n]; //元素传送的时候会有数据丢失,建议b数组比a数组大一倍就行
int i, x, y = 0;
int m; cin >> m; //摆设
for (i = 0; i <n; i++)cin >> a[i];
cin >> x;
for (i = n - x; i<n; i++)
{
for (; y < x;)
{
b[y] = a[i];
y++;
break;
}
}
for (i = 0; i < n; i++)b[x + i] = a[i];
for (i = 0; i < n; i++)cout << b[i] << " ";
return 0;
}
*/

 

 

 

 

/*
//字符串中的正整数
//输入一个字符串,提取出该字符串中的所有正整数。
//输入一行字符串(字符串中没有空白字符,字符串长度不超过100)。
//输出若干行,每行是一个字符串中的正整数,若输入的字符串中无正整数,则输出None
样例输入
Beijinguniversity1898year100
样例输出
1898
100
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int a[30]={0};
char str[200];
//cout << "请输入一个含有数字的字符串" << endl;
cin >> str;
bool flag = 0;
int i = 0, j = 0;
int s = 0;
int num = strlen(str);
//cout<<"你一共输入了:<<num<<"个字符"<<endl;
for (i = 0; i<num;)
{
while (str[i] >= '0' && str[i] <= '9' &&i < num)
{
s = s * 10 + int(str[i]) - int('0');
i++;
flag = 1;
}
if (flag == 1)
{
a[j++] = s;
s = 0;
flag = 0;
}
i++;
}
i = 0;
//cout<<"其中共"<<j<<"个数字"<<endl;
if (j==0)cout << "None";
while(i<j)
{
cout<<a[i]<<endl;
i++;
}
return 0;
}
*/