奇怪的j++

本文通过一个简单的Java程序示例,详细解释了在for循环中使用自增运算符可能导致的预期之外的结果。具体地,展示了变量在进行自增操作后立即被自身覆盖导致的值始终不变的现象。

public class Increament {
public static void main(String[] args) {
int j = 0;
for (int i = 0; i < 100; i++)
j=j++;
System.out.println(j);
}
}

输出为0
注意
j=j++;

J++后的值还是0
这是j又被赋值为0
所以循环下来还是 0
题目描述 小明有 n 个硬币,每个硬币有不同的价值 wi ,他想购买商店里一个价钱为 k 的物品,但是店家很奇怪,不给找零,现在他应该凑哪些硬币,使得其价值总和刚好为 k 呢? 输入格式 第 1 行输入两个正整数 n,k ,n 表示硬币数,k 表示物品的价格。 第 2 行输入 n 个整数,表示对应硬币的价值 wi 。 输出格式 如果不能凑出价值 k ,输出NO; 如果能凑出价值 k ,输出YES,接下来一行输出若干个数,表示使用的硬币的价值,每个数之间用空格隔开,如果有多组解,输出硬币编号最小的那组。(也就是该解的值对应的编号字典序最小) 输入样例1 4 11 1 3 5 7 输出样例1 YES 1 3 7 输入样例2 6 11 1 6 2 4 8 10 输出样例2 YES 1 6 4 样例说明 样例 2 ,答案有多组,但是编号为 1,2,4 的硬币是编号最小的那组,故输出编号所对应的硬币价值1 6 4 。 数据范围 1≤n≤20,1≤k≤109,1≤wi≤109。 #include<bits/stdc++.h> using namespace std; int n,k,w[25],ans[25],cnt[25],bot,i[25],chao; void findans(){ int f = 0; for( i[1]=0;i[1]<=1;i[1]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[2]=0;i[2]<=1;i[2]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[3]=0;i[3]<=1;i[3]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[4]=0;i[4]<=1;i[4]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[5]=0;i[5]<=1;i[5]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[6]=0;i[6]<=1;i[6]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[7]=0;i[7]<=1;i[7]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[8]=0;i[8]<=1;i[8]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[9]=0;i[9]<=1;i[9]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[10]=0;i[10]<=1;i[10]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[11]=0;i[11]<=1;i[11]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[12]=0;i[12]<=1;i[12]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[13]=0;i[13]<=1;i[13]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[14]=0;i[14]<=1;i[14]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[15]=0;i[15]<=1;i[15]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[16]=0;i[16]<=1;i[16]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[17]=0;i[17]<=1;i[17]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[18]=0;i[18]<=1;i[18]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[19]=0;i[19]<=1;i[19]++){ f++; if(f>n) { bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } continue; } for( i[20]=0;i[20]<=1;i[20]++){ bot = 0; for(int j=1;j<=n;j++) bot += w[j]*i[j]; if(bot==k){ for(int j=1;j<=n;j++) cnt[j] = i[j]; bool betr = false; if(chao==0){ betr = true; } else { for(int j=1;j<=n;j++){ if(cnt[j] < ans[j]){ betr = true; break; } else if(cnt[j] > ans[j]){ break; } } } if(betr){ for(int j=1;j<=n;j++) ans[j] = cnt[j]; chao = 1; } } } } } } } } } } } } } } } } } } } } } } } int main(){ cin>>n>>k; for(int i=1;i<=n;i++){ cin>>w[i]; } findans(); if(chao==0){ cout<<"NO"<<endl; }else{ cout<<"YES"<<endl; bool first = true; for(int i=1;i<=n;i++){ if(ans[i]==1){ if(!first) cout<<" "; cout<<w[i]; first = false; } } cout<<endl; } return 0; } 根据题意修正代码逻辑错误
08-14
我的代码如下,请检查 #include<bits/stdc++.h> using namespace std; using tup = tuple<int, int, int>; // (x, y, g) const int N = 10; int n; int mp[N][N]; int b[N][N][N]; vector<tup> ans; void read() { for (int col = 0; col < 5; col++) { int row = 0; while (true) { int x; cin >> x; if (x == 0) break; mp[row][col] = x; row ++; } } } void copy_from(int k) { for (int i = 0; i < 7; i++) for (int j = 0; j < 5; j++) b[k][i][j] = mp[i][j]; } void copy_back(int k) { for (int i = 0; i < 7; i++) for (int j = 0; j < 5; j++) mp[i][j] = b[k][i][j]; } bool check() { for (int i = 0; i < 7; i++) for (int j = 0; j < 5; j++) if (mp[i][j]) return false; return true; } void Fall() { for (int j = 0; j < 5; j++) { vector<int> tmp; for (int i = 0; i < 7; i++) if (mp[i][j]) tmp.push_back(mp[i][j]); for (int i = 0; i < 7; i++) if (i < tmp.size()) mp[i][j] = tmp[i]; else mp[i][j] = 0; } } bool remove() { vector<tup> vec; for (int i = 1; i <= 5; i++) for (int j = 1; j <= 7; j++) { if (mp[i][j] && mp[i - 1][j] == mp[i][j] && mp[i + 1][j] == mp[i][j]) vec.push_back({ i, j, 0 }); if (mp[i][j] && mp[i][j - 1] == mp[i][j] && mp[i][j + 1] == mp[i][j]) vec.push_back({ i, j, 1 }); } if (vec.empty()) return 0; for (auto &[x, y, g] : vec) { if (g == 0) mp[x][y] = mp[x][y - 1] = mp[x][y + 1] = 0; else mp[x][y] = mp[x - 1][y] = mp[x + 1][y] = 0; } return 1; } void move(int x, int y, int g) { swap(mp[x][y], mp[x][y + g]); Fall(); while (remove()) Fall(); } void dfs(int k) { if (k == n + 1) { if (check()) { for (auto [x, y, g] : ans) cout << y << " " << x << " " << g << '\n'; exit(0); } return; } copy_from(k); bool flag = false; for (int j = 0; j < 5; j++) { for (int i = 0; i < 7; i++) { if (!mp[i][j]) continue; // 向右移动 if (j < 4) { move(i, j, 1); ans.push_back({i, j, 1}); dfs(k + 1); ans.pop_back(); copy_back(k); } // 向左移动 if (j > 0) { if (mp[i][j] == mp[i + 1][j] && flag) continue; if (mp[i][j] == mp[i + 1][j]) flag = true; move(i, j, -1); ans.push_back({i, j, -1}); dfs(k + 1); ans.pop_back(); copy_back(k); } } } } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n; read(); dfs(1); cout << -1 << '\n'; return 0; }
07-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值