感冒了状态不是很好QWQ
A:
A.Remove the Value | |||||
| |||||
Description | |||||
小t想知道把一个数组中的某个值去掉之后,数组的长度和剩下的数字有哪些。你会帮她的对吧? | |||||
Input | |||||
输入数据有多组,每组数据第一行输入两个整数n(1≤n≤100)和val(1≤val≤100),表示数组的长度和要去掉的值。第 二行输入n个整数ai(1≤ai≤100),表示数组中的n个数字。 | |||||
Output | |||||
对于每组输入数据,第一行输出一个整数,表示操作后的数组长度,第二行输出操作后数组中的数字,两个数之间用空格隔 开,行末不包含空格,要求不改变原数组顺序。 | |||||
Sample Input | |||||
4 3 3 2 2 3 5 3 3 2 4 1 3 | |||||
Sample Output | |||||
2 2 2 3 2 4 1 |
代码:
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int v[105];
int main()
{
int n,m,i;
while(~scanf("%d%d",&n,&m))
{
for(i=0;i<n;i++)
{
scanf("%d",&v[i]);
}
int len=0;
for(i=0;i<n;i++)
{
if(v[i]!=m)
{
len++;
}
}
printf("%d\n",len);
for(i=0;i<n;i++)
{
if(v[i]!=m)
{
printf("%d",v[i]);
break;
}
}
for(i++;i<n;i++)
{
if(v[i]!=m)
{
printf(" %d",v[i]);
}
}
printf("\n");
}
return 0;
}
C:
C.You Guess | |||||
| |||||
Description | |||||
现给出如下序列的前五组: 1 1 2 11 3 21 4 1211 5 111221 1可以读作“one 1”或11 11可以读作“two 1s”或21 21可以读作“one 2,one 1”或1211 现在小t想知道序列的第n个值是什么,你会告诉她的对吧? | |||||
Input | |||||
数据有多组输入,每组数据输入一个正整数n(1≤n≤30),含义如题。 | |||||
Output | |||||
对于每组输入数据,输出序列的第n个值,每组输出占一行。 | |||||
Sample Input | |||||
1 2 3 4 5 | |||||
Sample Output | |||||
1 11 21 1211 111221 |
代码:
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int v[35][10005];
int main()
{
int i,n,j,www;
v[1][0]=1;
for(i=1;i<30;i++)
{
j=0;
www=0;
while(v[i][j]!=0)
{
int cnt=1;
while(v[i][j]==v[i][++j])
{
cnt++;
}
v[i+1][www++]=cnt;
v[i+1][www++]=v[i][j-1];
}
}
while(~scanf("%d",&n))
{
i=0;
while(v[n][i]!=0)
{
printf("%d",v[n][i++]);
}
printf("\n");
}
return 0;
}
D:
D.A Simple Problem | |||||
| |||||
Description | |||||
小t又遇见问题了,你肯定还会帮她的对吧?
给出一个数组(只含有正整数),现假设你在数组的第一个位置,数组的每个值表示在当前位置你可以跳的最大步数。 如a2=3,表示你在下标为2的位置时,一次最多可以跳3步。现在你想跳到数组的最后一个位置,问最少要跳多少次?多少次不是多少步… | |||||
Input | |||||
有多组输入数据,每组数据第一行输入一个正整数n(1≤n≤30000),第二行输入n个整数ai(1≤ai≤109),含义如题。 | |||||
Output | |||||
对于每组输入数据,输出小t跳到数组最后的位置需要跳的最少次数,每组输出占一行。 | |||||
Sample Input | |||||
5 2 3 1 1 4 2 1000 1 | |||||
Sample Output | |||||
2 1 | |||||
Hint | |||||
1.对于样例1,到达4位置最少要跳2次。 第一次:从0位置跳到1位置; 第二次:跳3步跳到最后位置。 2.数据保证你一定能跳到最后位置。 |
思路:策略为,若能跳到终点则直接跳到,否则跳到下一步能跳到最远距离的位置
代码:(没测试过先存着,欢迎指正)
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int v[30005];
int main()
{
int n,i,j;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%d",&v[i]);
int cnt=0;
i=0;
while(i<n-1)
{
if(v[i]+i>=n-1)
{
cnt++;
break;
}
int ma=i+1;
for(j=i+2;j<=i+v[i];j++)
{
if(v[j]+j>v[ma]+ma)
ma=j;
}
cnt++;
i=ma;
}
printf("%d\n",cnt);
}
return 0;
}