67,513
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include <string.h>
#pragma pack(4)
struct DataGroup
{
int A;
int B;
int C;
int D;
};
#pragma pack()
const DataGroup datas[] = {
{ 1, 1, 10, 10 },
{ 1, 1, 20, 20 },
{ 1, 1, 30, 30 },
{ 2, 2, 40, 100},
{ 2, 2, 50, 200},
{ 2, 2, 60, 300},
{ 3, 3, 70, 70 },
{ 3, 4, 80, 80 },
{ 3, 4, 90, 90 },
{ 4, 3, 90, 90 },
{ 4, 3, 100,100},
{ 4, 3, 100,100}
};
#define MAX_INT 0x7FFFFFFF
void procSum(int i, int dataCount, char* mark, int A, int B, int& sumC, int& sumD)
{
for(; i < dataCount; i++)
{
if(datas[i].A == A && B == datas[i].B)
{
sumC += datas[i].C;
sumD += datas[i].D;
mark[i] = (char)1; //设置计算标识
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int start = 0;
int sumC, sumD;
int dataCount = sizeof(datas) / sizeof(DataGroup);
if( dataCount < 1)
{
return 0;
}
//分配是否才查找过的标识
char* mark = new char[dataCount];
if(NULL == mark)
{
printf("Alloc new memory error.");
return -1;
}
memset(mark, 0, dataCount);
for(int i = start; i < dataCount; i++)
{
if(mark[i] == (char)0)
{
sumC = 0; sumD = 0;
procSum( i, dataCount, mark, datas[i].A, datas[i].B, sumC, sumD);
printf("A: %d, B: %d, sumC: %d, sumD: %d. ", datas[i].A, datas[i].B, sumC, sumD);
if(sumC != sumD)
{
printf("Result: error.\n");
}
else
{
printf("Result: Success.\n");
}
}
}
return 0;
}
select T1.* from (
select A,sum(C) as SC, sum(D) as SD from item where A = B group by A) T1
where T1.SC <> T1.SD
select case sum(c) - sum(d) when 0 then 'true' else 'false' from tablename where a = b group by a,b
c++的话么先定义一个结构体或者类,然后排序(排序同学你就自己做吧,你别说排序不会呀),最后逐条判断,输出
#include <iostream>
#define INT_DATA_NUM 10
struct Data
{
int a;
int b;
int c;
int d;
}
int main()
{
Data MyDatas[INT_DATA_NUM];
for (int i = 0; i < INT_DATA_NUM; i++)
{
MyDatas[i].a =// 自己填吧,ABCD,生成待判断的数据
}
//接下来排序,排序方法很多自己弄吧,比如你可以把A * 10000然后加上B生成一个AB,用AB排序,冒泡就行。(取决于A,B的最大值)
//判断c和d的值。
int SumC,SumD, LastA, LastB;
SumC = 0;
SumD = 0;
for(int j = 0 ; j < INT_DATA_NUM; j++)
{
if (j == 0)
{
LastA = MyDatas[j].a;
LastB = MyDatas[j].b;
SumC = MyDatas[j].c;
SumD = MyDatas[j].d;
}
else
{
if (MyDatas[j].a == LastA && MyDatas[j].b == LastB)
{
SumC += MyDatas[j].c;
SumD += MyDatas[j].d;
}
else
{
if (SumC == SumD && LastA == LastB)
cout << "true" << endl;
else (SumC!= SumD && LastA == LastB)
cout << "false" << endl;
SumC = 0;
SumD = 0;
}
}
}
}
代码细节可能有错,总之你领会一下意思,自己好好写。不要学上班逢包就发到青岛的美国佬。
package csdn;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class Data{
/**
* 模拟一下数据
*/
private int argA;
private int argB;
private int argC;
private int argD;
public int getArgA() {
return argA;
}
public void setArgA(int argA) {
this.argA = argA;
}
public int getArgB() {
return argB;
}
public void setArgB(int argB) {
this.argB = argB;
}
public int getArgC() {
return argC;
}
public void setArgC(int argC) {
this.argC = argC;
}
public int getArgD() {
return argD;
}
public void setArgD(int argD) {
this.argD = argD;
}
public Data(int argA, int argB, int argC, int argD) {
super();
this.argA = argA;
this.argB = argB;
this.argC = argC;
this.argD = argD;
}
public Data(){
}
@Override
public String toString(){
return String.format("%d,%d,%d,%d", argA, argB, argC, argD);
}
}
/**
* 数据检测
* @author sztsiang
*
*/
public class DataChecker {
private Map<Integer, Integer> map = new HashMap<Integer, Integer>();
private void add(int key, int value){
if(map.containsKey(key))
map.put(key, map.get(key) + value);
else{
map.put(key, value);
}
}
public void add(int argA, int argB, int argC, int argD){
if(argA == argB){
add(argA, argC - argD);
}
}
private boolean check(int key){
Integer v = map.get(key);
return null != v && v == 0;//仅值不为空且为0时为符合条件的
}
public boolean check(int argA, int argB){
return argA == argB && check(argA);//仅A值与B值相等才去查找,否则直接不符合
}
public static void main(String[] args) {
// TODO Auto-generated method
List<Data> list = new ArrayList<Data>();//表面上模拟一下,不知道你项目中真实的数据结构
list.add(new Data(1, 1, 10, 10));
list.add(new Data(1, 1, 20, 20));
list.add(new Data(2, 2, 10, 10));
list.add(new Data(3, 4, 10, 10));
list.add(new Data(2, 2, 20, 10));
DataChecker dc = new DataChecker();
//存入map
for(Data data : list){
dc.add(data.getArgA(), data.getArgB(), data.getArgC(), data.getArgD());
}
//遍历打印
for(Data d : list){
System.out.print(d);
if(dc.check(d.getArgA(), d.getArgB())){
System.out.println(" true");
}else{
System.out.println(" error");
}
}
}
}
/**运行结果:
1,1,10,10 true
1,1,20,20 true
2,2,10,10 error
3,4,10,10 error
2,2,20,10 error
*/
[/quote]
可能是我没说清楚
A列和B列完全一样的时候,是一个组合,此时判断这组数据的C列和D列是否相等。
1,1,10,10 true
1,1,20,20 true
这个是对的,这组数据,C列的和等于D列的和,所以输出“true”。
2,2,10,10 error
2,2,20,10 error
这个是对的,这组数据,C列的和不等于D列的和,所以输出“false”。
3,4,10,10 error
这个是错的,这组数据,C列的和等于D列的和,所以输出“true”。