我的需求是输入w,输出i+1,如果i+1=7,则输出0,;i+1=8;输出1;以此类推直到i自增到i=w+6;这种情况下,是我的原始代码更好,还是你修改后的代码更符合需求呢
时间: 2024-02-25 17:52:49 浏览: 48
根据你的需求,我理解你的意思是需要一个循环,从i+1开始递增,当i+1等于7时,输出0,当i+1等于8时,输出1,以此类推,直到i自增到i=w+6。如果是这样的话,我建议你使用以下代码:
```python
i = 0
for j in range(w):
i += 1
if i == 7:
print(0)
elif i == 8:
print(1)
else:
print(i)
if i == w+6:
break
```
这段代码中使用了一个for循环,每次循环中i都会加1,然后根据i的值输出对应的结果。当i自增到w+6时,退出循环。这样的代码应该可以满足你的需求。
相关问题
#include<bits/stdc++.h> using namespace std; int yxj[128],top=0; char st[25],s[25]; int main() { yxj['+']=1; yxj['-']=1; yxj['*']=2; yxj['/']=2; yxj['(']=-1; while(~scanf("%s",s)){ int i=0; int j=0; int w; if(s<=9&&s>=0)cout<<s<<" ";i++;//是数字,将其输出 else if(top=0&&s!<=9&&s!>=0)st[j]==s;i++;j++;top++;//栈中没有值,就直接将运算符放入 else if(s=='(')st[j]==s;i++;j++;top++;w=i;//当前是左括号,直接放入 else if(s==')'){ s=" ";; top--; j--; while(s==')'){ cout>>s<<" "; w++; j--; top--; } }//当前是右括号,取出栈顶的运算符直到左括号为止,并且将左括号弹出 else if(yxj[s]==2)st[j]==s;j++;i++;top++;//当前运算符优先级较高,直接放入 else { w=i; while(yxj[s]==2){ cout>>s<<" "; w++; j--; top--; } } //当前运算符优先级小于等于栈顶运算符优先级,则不断弹出栈顶运算符直到当前运算符优先级较高 } while(top);//结束后将栈中运算符输出 }
这段代码是一个将中缀表达式转换为后缀表达式的实现。它使用了一个数组 `yxj` 来存储运算符的优先级,`top` 表示栈顶指针,`st` 数组用于存储运算符,`s` 数组用于存储输入的表达式。
代码的主要思路是遍历输入的表达式,根据当前字符的类型进行不同的操作。如果是数字,则直接输出;如果栈为空,则将运算符放入栈中;如果是左括号,则直接放入栈中;如果是右括号,则从栈中取出运算符直到遇到左括号,并将左括号弹出;如果当前运算符优先级较高,则直接放入栈中;如果当前运算符优先级小于等于栈顶运算符优先级,则不断弹出栈顶运算符直到当前运算符优先级较高。
最后,将栈中剩余的运算符输出即可得到后缀表达式。
需要注意的是,代码中存在一些错误。比如在判断数字时,应该使用 `s[i] >= '0' && s[i] <= '9'`,而不是 `s <= 9 && s >= 0`;在赋值运算符时,应该使用 `st[j] = s`,而不是 `st[j] == s`;在输出运算符时,应该使用 `cout << s << " "`,而不是 `cout >> s << " "`。
另外,代码中的 `while(top)` 应该改为 `while (top > 0)`。
修正后的代码如下所示:
```cpp
#include<bits/stdc++.h>
using namespace std;
int yxj[128],top=0;
char st[25],s[25];
int main()
{
yxj['+'] = 1;
yxj['-'] = 1;
yxj['*'] = 2;
yxj['/'] = 2;
yxj['('] = -1;
while(~scanf("%s",s)){
int i = 0;
int j = 0;
int w;
if(s[i] >= '0' && s[i] <= '9') {
cout << s << " ";
i++;
} else if(top == 0 && !(s[i] >= '0' && s[i] <= '9')) {
st[j] = s[i];
i++;
j++;
top++;
} else if(s[i] == '(') {
st[j] = s[i];
i++;
j++;
top++;
w = i;
} else if(s[i] == ')') {
s = " ";
top--;
j--;
while(s == ')') {
cout << s << " ";
w++;
j--;
top--;
}
} else if(yxj[s[i]] == 2) {
st[j] = s[i];
j++;
i++;
top++;
} else {
w = i;
while(yxj[s[i]] == 2) {
cout << s << " ";
w++;
j--;
top--;
}
}
}
while(top > 0) {
// 输出栈中剩余的运算符
}
}
```
请注意,这只是修正了代码中的一些错误,还需要根据实际需求来完善输出栈中剩余的运算符的部分。
#include <stdio.h> #include <stdlib.h> #include <conio.h> #define MAX 20 typedef int VexType; typedef VexType Mgraph[MAX][MAX]; /* Mgraph是二维数组类型标识符 */ /* 函数原形声明 */ void creat_mg(Mgraph G); void out_mg(Mgraph G); Mgraph G1; /* G1是邻接矩阵的二维数组名 */ int n,e,v0; /* 主函数 */ int main() { creat_mg(G1); out_mg(G1); return 0; }/* main */ /* 建立邻接矩阵 */ void creat_mg(Mgraph G) { int i, j, k; printf("\n n,e=?"); scanf("%d%d", &n, &e); /* 输入顶点数n,边数e */ for(i=1; i<=n;i++) for(j=1;j<=n;j++) G[i][j]=0; /* 如果是网,G[i][j]=0改为G[i][j]=32767(无穷)*/ for(k=1;k<=e;k++) /* 组织边数的循环 */ { printf("\n vi,vj=?"); scanf("%d%d", &i, &j); /* 输入一条边的两个顶点编号i,j */ G[i][j]=1; G[j][i]=1; /* 无向图的邻接矩阵是对称矩阵 */ /* 如果是网,还要输入边的权值w,再让G[i][j]=w */ } } /* creat_mg */ /* 邻接矩阵简单输出,为了检查输入是否正确 */ void out_mg(Mgraph G) { int i,j,k; char ch; for(i=1; i<=n;i++) /* 矩阵原样输出 */ { printf("\n "); for(j=1;j<=n;j++) printf("%5d",G[i][j]); } /* 输出所存在的边 */ for(i=1; i<=n;i++) for(j=1;j<=n;j++) if(G[i][j]==1) printf("\n 存在边< %d,%d >", i, j); printf("\n\n 打回车键,继续。"); ch=getch(); } /* out_mg */
这段代码是一个简单的邻接矩阵表示图的程序,可以让用户输入顶点数和边数,然后输入每条边的两个顶点,最后输出邻接矩阵和所存在的边。
如果您想修改这段代码,可以根据您的具体需求进行修改。以下是一些可能的修改建议:
1. 如果您想让程序支持有向图而不是无向图,可以将第21行和第22行的代码改为 G[i][j]=1;,只让一个方向的边存在。
2. 如果您想让程序支持网(边有权值)而不是简单图,可以在第28行的输入边的两个顶点后再输入一条语句,让用户输入边的权值w,然后将第23行和第24行的代码改为 G[i][j]=w; G[j][i]=w;。
3. 如果您想让程序输出更详细的信息,可以在第33行后添加一些输出语句,比如输出每个顶点的度数等。
当然,这只是一些修改的建议,具体的修改取决于您的需求。
阅读全文