题一:
#include<stdio.h>
int a[10005];
int main()
{
int n,m;//输入数据
int flag=0;
scanf("%d %d",&n,&m);
int t=m+1;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
while(t<=m+n)
{
for(int i=1;i<=m;i++)
{
a[i]--;//将m组数据每经过一秒就减少1
if(a[i]==0)//这个数据为0时将其替换为下一个 t=m+1
{
a[i]=a[t];
t++;
}
}flag++;//记录秒数
}printf("%d",flag);输出秒数
}
这里是用的搜索
思路:先找到字符‘y'(这里我是将发现的y的横纵坐标调用函数)从这里开始往8个方向找如果能够连成yizhong就利用book数组将这些位置给标记起来。
之后就利用标记来判断被标记的就将原来的字符给正常打印出来没有被标记的就打印*就行了
#include <stdio.h>
char a[101][101];int n;
int next[8][2] = {{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,-1},{-1,1}};
char c[8] = "yizhong";
int book[101][101]={0};
void flag(int x, int y) {
for (int i = 0; i <= 7; i++) {
int flag = 0;
for (int j = 0; j < 7; j++) {
int tx = x + next[i][0] * j;
int ty = y + next[i][1] * j;
if (a[tx][ty] != c[j]) {
flag = 1;
break;
}
}
if (flag == 0) {
for (int j = 0; j < 7; j++) {
int tx = x + next[i][0] * j;
int ty = y + next[i][1] * j;
book[tx][ty] = 1;
}
}
}
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%s",a[i]+1); //用%c那种不行不知道为什么
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (a[i][j] == 'y') {
flag(i, j);
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (book[i][j] == 1) {
printf("%c", a[i][j]);
} else {
printf("*");
}
}
printf("\n");
}
return 0;
}
题三:约瑟夫问题
这里用模拟也可以都是我用了队列
#include<bits/stdc++.h>//bits/stdc++。h
//queue<int>.q创造q的对列
//q.push(i);将i压入队列
//q.front(); 返回队首
//q.back();方晖队尾
//q.empty();检查队列是否为空
using namespace std;
int main()
{
queue<int>q;
int n,m,flag=0;//这里的flag用于打印了多少次
cin>>n>>m;//读入n和m的值
for(int i=1;i<=n;i++)
{
q.push(i);//将元素弄进队列
}
while(flag<n)
{
for(int i=1;i<m;i++)
{
q.push(q.front());//比如此时m=3就把前面两个压入队尾
q.pop();//将被压入的元素删掉
}
cout<<q.front()<<" ";//输出
q.pop();//将输出的删掉
flag++;
}
return 0;
}
计划:补提